@etherisc/gif-next 0.0.2-d5fac82-078 → 0.0.2-d62f29e-108

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 (509) 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 +1253 -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 +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1032 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +148 -0
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1489 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +172 -408
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +272 -335
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +75 -88
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +169 -263
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +186 -94
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +71 -72
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +190 -49
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +81 -141
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1158 -278
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +592 -311
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +271 -109
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +65 -58
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1113 -353
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +21 -0
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  73. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  74. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  75. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  76. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1126 -0
  77. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  78. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  79. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  80. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  81. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  82. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +765 -0
  83. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  84. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  85. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  86. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1018 -0
  87. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  88. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
  89. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  90. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  91. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  92. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1395 -0
  93. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  94. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  95. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +395 -228
  97. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +121 -66
  99. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  100. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +204 -32
  101. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  102. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +180 -366
  103. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  104. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +340 -209
  105. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  106. package/artifacts/contracts/pool/Pool.sol/Pool.json +220 -465
  107. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +395 -445
  109. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +51 -84
  111. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +88 -173
  113. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +56 -53
  115. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  116. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1243 -0
  117. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  118. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  119. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  120. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +234 -202
  121. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +79 -72
  123. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +25 -1
  125. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  126. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +134 -1
  127. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  128. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +217 -73
  129. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  130. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +83 -44
  131. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  132. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +270 -183
  133. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  134. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +15 -57
  135. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  136. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +241 -307
  137. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +67 -108
  139. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  140. package/artifacts/contracts/product/PricingService.sol/PricingService.json +184 -235
  141. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -73
  143. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  144. package/artifacts/contracts/product/Product.sol/Product.json +336 -352
  145. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  146. package/artifacts/contracts/product/RiskService.sol/RiskService.json +695 -0
  147. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  148. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +702 -0
  149. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  151. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  152. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +107 -33
  153. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  154. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +42 -73
  155. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  156. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/Registry.sol/Registry.json +360 -48
  158. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  159. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1557 -116
  160. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  161. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +198 -28
  162. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  163. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +45 -42
  164. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  165. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  166. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  167. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  168. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  169. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
  170. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -136
  172. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  173. package/artifacts/contracts/shared/Component.sol/Component.json +99 -159
  174. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  175. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1236 -206
  176. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  177. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +804 -0
  178. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  179. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +539 -0
  180. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +76 -107
  182. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  183. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1033 -0
  184. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  185. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +700 -0
  186. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  187. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +12 -16
  188. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  189. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -6
  190. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  191. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  192. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  193. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +21 -3
  194. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  196. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
  199. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  200. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  201. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  202. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  203. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  204. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +940 -0
  205. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  206. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +497 -0
  207. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  208. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +133 -0
  209. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  210. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  211. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +33 -20
  213. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +31 -13
  215. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +17 -22
  217. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  218. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  219. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  220. package/artifacts/contracts/shared/Service.sol/Service.json +16 -16
  221. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  222. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +362 -7
  223. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  224. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  225. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  226. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
  227. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  228. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +566 -54
  229. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  230. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  231. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  232. package/artifacts/contracts/staking/Staking.sol/Staking.json +1975 -0
  233. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  234. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  235. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  236. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +765 -0
  237. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  238. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  239. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +657 -100
  241. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +65 -46
  243. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  244. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2242 -0
  245. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  246. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  247. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  248. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  249. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/Amount.sol/AmountLib.json +97 -4
  251. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  253. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  255. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  257. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/Fee.sol/FeeLib.json +39 -34
  259. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  261. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  263. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  264. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  265. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +149 -2
  267. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  269. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  271. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  272. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  273. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  275. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
  277. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -2
  279. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  280. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  281. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  282. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  283. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  285. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  286. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  287. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  289. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  291. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +58 -2
  293. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  295. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  297. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  298. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  301. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  302. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  303. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  304. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  305. package/contracts/authorization/AccessAdmin.sol +591 -0
  306. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  307. package/contracts/authorization/Authorization.sol +217 -0
  308. package/contracts/authorization/IAccess.sol +48 -0
  309. package/contracts/authorization/IAccessAdmin.sol +136 -0
  310. package/contracts/authorization/IAuthorization.sol +54 -0
  311. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  312. package/contracts/authorization/IServiceAuthorization.sol +38 -0
  313. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  314. package/contracts/authorization/ServiceAuthorization.sol +90 -0
  315. package/contracts/distribution/BasicDistribution.sol +138 -0
  316. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  317. package/contracts/distribution/Distribution.sol +162 -152
  318. package/contracts/distribution/DistributionService.sol +129 -144
  319. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  320. package/contracts/distribution/IDistributionComponent.sol +28 -47
  321. package/contracts/distribution/IDistributionService.sol +24 -10
  322. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  323. package/contracts/instance/IInstance.sol +24 -38
  324. package/contracts/instance/IInstanceService.sol +44 -25
  325. package/contracts/instance/Instance.sol +111 -112
  326. package/contracts/instance/InstanceAdmin.sol +213 -282
  327. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  328. package/contracts/instance/InstanceReader.sol +114 -52
  329. package/contracts/instance/InstanceService.sol +280 -111
  330. package/contracts/instance/InstanceServiceManager.sol +2 -6
  331. package/contracts/instance/InstanceStore.sol +142 -66
  332. package/contracts/instance/base/BalanceStore.sol +123 -0
  333. package/contracts/instance/base/Cloneable.sol +2 -25
  334. package/contracts/instance/base/ObjectCounter.sol +21 -0
  335. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  336. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -14
  337. package/contracts/instance/module/IAccess.sol +2 -0
  338. package/contracts/instance/module/IBundle.sol +1 -4
  339. package/contracts/instance/module/IComponents.sol +15 -10
  340. package/contracts/instance/module/IDistribution.sol +0 -1
  341. package/contracts/instance/module/IPolicy.sol +30 -23
  342. package/contracts/mock/Dip.sol +26 -0
  343. package/contracts/oracle/BasicOracle.sol +48 -0
  344. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  345. package/contracts/oracle/IOracle.sol +36 -0
  346. package/contracts/oracle/IOracleComponent.sol +33 -0
  347. package/contracts/oracle/IOracleService.sol +65 -0
  348. package/contracts/oracle/Oracle.sol +167 -0
  349. package/contracts/oracle/OracleService.sol +279 -0
  350. package/contracts/oracle/OracleServiceManager.sol +39 -0
  351. package/contracts/pool/BasicPool.sol +166 -0
  352. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  353. package/contracts/pool/BundleService.sol +254 -200
  354. package/contracts/pool/BundleServiceManager.sol +2 -5
  355. package/contracts/pool/IBundleService.sol +35 -19
  356. package/contracts/pool/IPoolComponent.sol +10 -66
  357. package/contracts/pool/IPoolService.sol +79 -33
  358. package/contracts/pool/Pool.sol +168 -144
  359. package/contracts/pool/PoolService.sol +317 -212
  360. package/contracts/pool/PoolServiceManager.sol +2 -5
  361. package/contracts/product/ApplicationService.sol +139 -77
  362. package/contracts/product/ApplicationServiceManager.sol +2 -2
  363. package/contracts/product/BasicProduct.sol +53 -0
  364. package/contracts/product/BasicProductAuthorization.sol +43 -0
  365. package/contracts/product/ClaimService.sol +134 -90
  366. package/contracts/product/ClaimServiceManager.sol +2 -2
  367. package/contracts/product/IApplicationService.sol +2 -1
  368. package/contracts/product/IClaimService.sol +32 -3
  369. package/contracts/product/IPolicyService.sol +29 -36
  370. package/contracts/product/IPricingService.sol +10 -8
  371. package/contracts/product/IProductComponent.sol +10 -12
  372. package/contracts/product/{IProductService.sol → IRiskService.sol} +2 -9
  373. package/contracts/product/PolicyService.sol +385 -189
  374. package/contracts/product/PolicyServiceManager.sol +2 -5
  375. package/contracts/product/PricingService.sol +97 -72
  376. package/contracts/product/PricingServiceManager.sol +2 -5
  377. package/contracts/product/Product.sol +176 -130
  378. package/contracts/product/RiskService.sol +97 -0
  379. package/contracts/product/RiskServiceManager.sol +39 -0
  380. package/contracts/registry/ChainNft.sol +8 -1
  381. package/contracts/registry/IRegistry.sol +41 -19
  382. package/contracts/registry/IRegistryService.sol +15 -5
  383. package/contracts/registry/Registry.sol +222 -111
  384. package/contracts/registry/RegistryAdmin.sol +308 -77
  385. package/contracts/registry/RegistryService.sol +52 -32
  386. package/contracts/registry/RegistryServiceManager.sol +4 -11
  387. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  388. package/contracts/registry/ReleaseRegistry.sol +485 -0
  389. package/contracts/registry/ServiceAuthorizationV3.sol +199 -0
  390. package/contracts/registry/TokenRegistry.sol +261 -64
  391. package/contracts/shared/Component.sol +141 -144
  392. package/contracts/shared/ComponentService.sol +590 -90
  393. package/contracts/shared/ComponentServiceManager.sol +35 -0
  394. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  395. package/contracts/shared/IComponent.sol +21 -41
  396. package/contracts/shared/IComponentService.sol +108 -0
  397. package/contracts/shared/IInstanceLinkedComponent.sol +49 -0
  398. package/contracts/{instance/base → shared}/IKeyValueStore.sol +7 -6
  399. package/contracts/{instance/base → shared}/ILifecycle.sol +3 -4
  400. package/contracts/shared/INftOwnable.sol +1 -1
  401. package/contracts/shared/IPolicyHolder.sol +6 -1
  402. package/contracts/shared/IService.sol +9 -2
  403. package/contracts/shared/InitializableCustom.sol +177 -0
  404. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +2 -2
  405. package/contracts/shared/InstanceLinkedComponent.sol +172 -0
  406. package/contracts/{instance/base → shared}/KeyValueStore.sol +36 -74
  407. package/contracts/shared/Lifecycle.sol +77 -0
  408. package/contracts/shared/NftIdSet.sol +65 -0
  409. package/contracts/shared/NftOwnable.sol +6 -16
  410. package/contracts/shared/PolicyHolder.sol +22 -17
  411. package/contracts/shared/Registerable.sol +2 -2
  412. package/contracts/shared/Service.sol +32 -22
  413. package/contracts/shared/TokenHandler.sol +112 -8
  414. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  415. package/contracts/staking/IStaking.sol +168 -0
  416. package/contracts/staking/IStakingService.sol +105 -47
  417. package/contracts/staking/StakeManagerLib.sol +224 -0
  418. package/contracts/staking/Staking.sol +498 -0
  419. package/contracts/staking/StakingLifecycle.sol +23 -0
  420. package/contracts/staking/StakingManager.sol +50 -0
  421. package/contracts/staking/StakingReader.sol +183 -0
  422. package/contracts/staking/StakingService.sol +283 -45
  423. package/contracts/staking/StakingServiceManager.sol +9 -5
  424. package/contracts/staking/StakingStore.sol +605 -0
  425. package/contracts/staking/TargetManagerLib.sol +211 -0
  426. package/contracts/type/AddressSet.sol +1 -1
  427. package/contracts/type/Amount.sol +29 -3
  428. package/contracts/type/Blocknumber.sol +26 -3
  429. package/contracts/type/Fee.sol +17 -16
  430. package/contracts/type/NftId.sol +14 -16
  431. package/contracts/type/NftIdSet.sol +1 -1
  432. package/contracts/type/ObjectType.sol +175 -62
  433. package/contracts/type/Referral.sol +2 -1
  434. package/contracts/type/RequestId.sol +75 -0
  435. package/contracts/type/RiskId.sol +1 -1
  436. package/contracts/type/RoleId.sol +104 -69
  437. package/contracts/type/Seconds.sol +48 -1
  438. package/contracts/type/Selector.sol +102 -0
  439. package/contracts/type/StateId.sol +28 -2
  440. package/contracts/type/String.sol +53 -0
  441. package/contracts/type/Timestamp.sol +17 -3
  442. package/contracts/type/UFixed.sol +34 -9
  443. package/contracts/type/Version.sol +4 -2
  444. package/contracts/{shared → upgradeability}/ProxyManager.sol +5 -7
  445. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  446. package/package.json +8 -5
  447. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  448. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  449. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  450. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -188
  451. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  452. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  453. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  454. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  455. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  456. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  457. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  458. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  459. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  460. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  461. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  462. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  463. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  464. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -883
  465. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  466. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -711
  467. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  468. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1003
  469. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  470. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
  471. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  472. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1715
  473. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  474. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1728
  475. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  476. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1747
  477. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  478. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1765
  479. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  480. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  481. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  482. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  483. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  484. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
  485. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  486. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1594
  487. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  488. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  489. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -630
  490. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  491. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  492. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  493. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -320
  494. package/contracts/instance/base/Lifecycle.sol +0 -121
  495. package/contracts/instance/module/ISetup.sol +0 -33
  496. package/contracts/instance/module/ITreasury.sol +0 -23
  497. package/contracts/product/ProductService.sol +0 -212
  498. package/contracts/product/ProductServiceManager.sol +0 -42
  499. package/contracts/registry/ReleaseManager.sol +0 -463
  500. package/contracts/shared/AccessManagerCustom.sol +0 -736
  501. package/contracts/shared/AccessManagerExtended.sol +0 -469
  502. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  503. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -125
  504. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  505. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  506. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  507. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -17
  508. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  509. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,58 +1,52 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
3
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
- import {ISetup} from "../instance/module/ISetup.sol";
14
11
 
15
12
  import {TokenHandler} from "../shared/TokenHandler.sol";
16
13
 
17
14
  import {Amount, AmountLib} from "../type/Amount.sol";
18
- import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
19
15
  import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
20
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
21
- import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
22
- import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../type/StateId.sol";
16
+ import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
17
+ import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
23
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
24
- import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
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
- import {ComponentService} from "../shared/ComponentService.sol";
23
+ import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
29
24
  import {IApplicationService} from "./IApplicationService.sol";
30
25
  import {IBundleService} from "../pool/IBundleService.sol";
31
26
  import {IClaimService} from "./IClaimService.sol";
27
+ import {IComponentService} from "../shared/IComponentService.sol";
32
28
  import {IDistributionService} from "../distribution/IDistributionService.sol";
33
29
  import {InstanceReader} from "../instance/InstanceReader.sol";
30
+ import {InstanceStore} from "../instance/InstanceStore.sol";
34
31
  import {IPolicyService} from "./IPolicyService.sol";
35
32
  import {IPoolService} from "../pool/IPoolService.sol";
36
33
  import {IPricingService} from "./IPricingService.sol";
37
- import {IService} from "../shared/IService.sol";
38
- import {Service} from "../shared/Service.sol";
39
34
 
40
35
  contract PolicyService is
41
- ComponentService,
36
+ ComponentVerifyingService,
42
37
  IPolicyService
43
38
  {
44
39
  using NftIdLib for NftId;
45
40
  using TimestampLib for Timestamp;
46
41
 
47
42
  IApplicationService internal _applicationService;
43
+ IComponentService internal _componentService;
48
44
  IBundleService internal _bundleService;
49
45
  IClaimService internal _claimService;
50
46
  IDistributionService internal _distributionService;
51
47
  IPoolService internal _poolService;
52
48
  IPricingService internal _pricingService;
53
49
 
54
- event LogProductServiceSender(address sender);
55
-
56
50
  function _initialize(
57
51
  address owner,
58
52
  bytes memory data
@@ -70,10 +64,11 @@ contract PolicyService is
70
64
  initializeService(registryAddress, authority, owner);
71
65
 
72
66
  VersionPart majorVersion = getVersion().toMajorPart();
73
- _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
67
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
74
68
  _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
69
+ _componentService = IComponentService(getRegistry().getServiceAddress(COMPONENT(), majorVersion));
75
70
  _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
76
- _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
71
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
77
72
  _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
78
73
  _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
79
74
 
@@ -81,41 +76,56 @@ contract PolicyService is
81
76
  }
82
77
 
83
78
 
84
- function getDomain() public pure override returns(ObjectType) {
85
- return POLICY();
86
- }
87
-
88
-
89
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
90
- IRegistry.ObjectInfo memory productInfo;
91
- (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
92
- product = Product(productInfo.objectAddress);
93
- }
94
-
95
-
96
79
  function decline(
97
- NftId policyNftId
80
+ NftId applicationNftId // = policyNftId
98
81
  )
99
82
  external
100
- override
83
+ virtual override
101
84
  {
102
- revert();
85
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
86
+ InstanceReader instanceReader = instance.getInstanceReader();
87
+
88
+ // check policy is in state applied
89
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
90
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
91
+ }
92
+
93
+ // check policy matches with calling product
94
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
95
+ if(applicationInfo.productNftId != productNftId) {
96
+ revert ErrorPolicyServicePolicyProductMismatch(
97
+ applicationNftId,
98
+ applicationInfo.productNftId,
99
+ productNftId);
100
+ }
101
+
102
+
103
+ // store updated policy info
104
+ instance.getInstanceStore().updatePolicyState(
105
+ applicationNftId,
106
+ DECLINED());
107
+
108
+ emit LogPolicyServicePolicyDeclined(applicationNftId);
103
109
  }
104
110
 
105
111
 
106
- /// @dev underwites application which includes the locking of the required collateral from the pool.
107
- function collateralize(
112
+ /// @inheritdoc IPolicyService
113
+ function createPolicy(
108
114
  NftId applicationNftId, // = policyNftId
109
- bool requirePremiumPayment,
110
115
  Timestamp activateAt
111
116
  )
112
117
  external
113
118
  virtual override
114
119
  {
115
120
  // check caller is registered product
116
- (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
121
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
117
122
  InstanceReader instanceReader = instance.getInstanceReader();
118
123
 
124
+ // check policy is in state applied
125
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
126
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
127
+ }
128
+
119
129
  // check policy matches with calling product
120
130
  IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
121
131
  if(applicationInfo.productNftId != productNftId) {
@@ -124,66 +134,61 @@ contract PolicyService is
124
134
  applicationInfo.productNftId,
125
135
  productNftId);
126
136
  }
127
-
128
- // check policy is in state applied
129
- if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
130
- revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
131
- }
132
137
 
133
- StateId newPolicyState = COLLATERALIZED();
138
+ // actual collateralizaion
139
+ _poolService.lockCollateral(
140
+ instance,
141
+ address(instanceReader.getComponentInfo(productNftId).token),
142
+ productNftId,
143
+ applicationNftId,
144
+ applicationInfo.bundleNftId,
145
+ applicationInfo.sumInsuredAmount);
134
146
 
135
147
  // optional activation of policy
136
148
  if(activateAt > zeroTimestamp()) {
137
- newPolicyState = ACTIVE();
138
- applicationInfo.activatedAt = activateAt;
139
- applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
140
- }
141
-
142
- // lock bundle collateral
143
- Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
144
-
145
- // optional collection of premium
146
- if(requirePremiumPayment) {
147
- netPremiumAmount = _processPremiumByTreasury(
148
- instance,
149
+ applicationInfo = _activate(
149
150
  applicationNftId,
150
- applicationInfo.premiumAmount);
151
-
152
- applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
151
+ applicationInfo,
152
+ activateAt);
153
153
  }
154
154
 
155
- // store updated policy info
156
- instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
155
+ // update policy and set state to collateralized
156
+ instance.getInstanceStore().updatePolicy(
157
+ applicationNftId,
158
+ applicationInfo,
159
+ COLLATERALIZED());
157
160
 
158
- // lock collateral and update pool and bundle book keeping
159
- // pool retention level: fraction of sum insured that product will cover from pool funds directly
160
- // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
161
- // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
162
- // might also call pool component (for isVerifyingApplications pools)
163
- _poolService.lockCollateral(
164
- instance,
161
+ // calculate and store premium
162
+ IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
165
163
  productNftId,
166
- applicationNftId,
167
- applicationInfo,
168
- netPremiumAmount); // for pool book keeping (fee + additional capital)
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
+ _distributionService.processReferral(
179
+ productInfo.distributionNftId,
180
+ applicationInfo.referralId);
181
+ }
182
+
183
+ // TODO add calling pool contract if it needs to validate application
169
184
 
170
185
  // TODO: add logging
171
- }
172
186
 
187
+ // TODO: add callback IPolicyHolder.policyActivated() if applicable
188
+ }
173
189
 
174
- function calculateRequiredCollateral(
175
- UFixed collateralizationLevel,
176
- Amount sumInsuredAmount
177
- )
178
- public
179
- pure
180
- virtual
181
- returns(Amount collateralAmount)
182
- {
183
- UFixed collateralUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
184
- return AmountLib.toAmount(collateralUFixed.toInt());
185
- }
186
190
 
191
+ /// @inheritdoc IPolicyService
187
192
  function collectPremium(
188
193
  NftId policyNftId,
189
194
  Timestamp activateAt
@@ -192,187 +197,378 @@ contract PolicyService is
192
197
  virtual
193
198
  {
194
199
  // check caller is registered product
195
- (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
200
+ (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
196
201
  InstanceReader instanceReader = instance.getInstanceReader();
202
+ StateId stateId = instanceReader.getPolicyState(policyNftId);
203
+
204
+ // check policy is in state collateralized or active
205
+ if (!(stateId == COLLATERALIZED())) {
206
+ revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
207
+ }
208
+
197
209
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
198
210
 
199
- if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
211
+ // check if premium is already collected
212
+ if (policyInfo.premiumPaidAmount.gtz()) {
200
213
  revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
201
214
  }
202
215
 
203
- Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
216
+ IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
204
217
 
205
- Amount netPremiumAmount = _processPremiumByTreasury(
206
- instance,
207
- policyNftId,
208
- unpaidPremiumAmount);
218
+ _processPremium(
219
+ instance,
220
+ policyNftId,
221
+ policyInfo,
222
+ premium);
209
223
 
210
- policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
224
+ // optionally activate policy
225
+ if(activateAt.gtz()) {
226
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
227
+ }
211
228
 
212
- _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
213
229
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
214
-
215
- if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
216
- activate(policyNftId, activateAt);
217
- }
230
+ instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
218
231
 
219
232
  // TODO: add logging
233
+
234
+ _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
235
+
236
+ // TODO: add callback IPolicyHolder.policyActivated() if applicable
220
237
  }
221
238
 
239
+ /// @inheritdoc IPolicyService
222
240
  function activate(NftId policyNftId, Timestamp activateAt) public override {
223
241
  // check caller is registered product
224
- (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
242
+ (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
225
243
  InstanceReader instanceReader = instance.getInstanceReader();
226
244
 
227
245
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
246
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
228
247
 
229
- require(
230
- policyInfo.activatedAt.eqz(),
231
- "ERROR:PRS-020:ALREADY_ACTIVATED");
232
-
233
- policyInfo.activatedAt = activateAt;
234
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
235
-
236
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
248
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
237
249
 
238
250
  // TODO: add logging
251
+
252
+ // TODO: add callback IPolicyHolder.policyActivated() if applicable
239
253
  }
240
254
 
241
255
 
256
+ /// @inheritdoc IPolicyService
242
257
  function expire(
243
- NftId policyNftId
258
+ NftId policyNftId,
259
+ Timestamp expireAt
244
260
  )
245
261
  external
246
262
  override
247
- // solhint-disable-next-line no-empty-blocks
263
+ virtual
264
+ returns (Timestamp expiredAt)
248
265
  {
249
-
266
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
267
+ InstanceReader instanceReader = instance.getInstanceReader();
268
+
269
+ // check policy matches with calling product
270
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
271
+ if(policyInfo.productNftId != productNftId) {
272
+ revert ErrorPolicyServicePolicyProductMismatch(
273
+ policyNftId,
274
+ policyInfo.productNftId,
275
+ productNftId);
276
+ }
277
+
278
+ // check policy is active
279
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
280
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
281
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
282
+ }
283
+
284
+ // set return value to provided timestamp
285
+ expiredAt = expireAt;
286
+
287
+ // update expiredAt to current block timestamp if not set
288
+ if (expiredAt.eqz()) {
289
+ expiredAt = TimestampLib.blockTimestamp();
290
+ }
291
+
292
+ // check expiredAt represents a valid expiry time
293
+ if (expiredAt >= policyInfo.expiredAt) {
294
+ revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
295
+ }
296
+ if (expiredAt < TimestampLib.blockTimestamp()) {
297
+ revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
298
+ }
299
+
300
+ // update policyInfo with new expiredAt timestamp
301
+ policyInfo.expiredAt = expiredAt;
302
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
303
+
304
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, expiredAt);
305
+
306
+ // TODO: add callback IPolicyHolder.policyExpired() if applicable
250
307
  }
251
308
 
309
+
252
310
  function close(
253
311
  NftId policyNftId
254
312
  )
255
313
  external
256
314
  override
257
315
  {
258
- (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
316
+ (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
259
317
  InstanceReader instanceReader = instance.getInstanceReader();
260
318
 
319
+ // check that policy has been activated
261
320
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
262
-
263
- if (policyInfo.activatedAt.eqz()) {
264
- revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
321
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
322
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
323
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
265
324
  }
266
325
 
267
- StateId state = instanceReader.getPolicyState(policyNftId);
268
- if (state != ACTIVE()) {
269
- revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
326
+ // check that policy has not already been closed
327
+ if (policyInfo.closedAt.gtz()) {
328
+ revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
270
329
  }
271
330
 
272
- if (policyInfo.closedAt.gtz()) {
273
- revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
331
+ // check that policy does not have any open claims
332
+ if (policyInfo.openClaimsCount > 0) {
333
+ revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
274
334
  }
275
335
 
276
336
  // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
277
- if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
337
+ // TODO consider to remove requirement for fully paid premiums altogether
338
+ if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
278
339
  revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
279
340
  }
280
341
 
281
- if (policyInfo.openClaimsCount > 0) {
282
- revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
283
- }
284
-
285
- policyInfo.closedAt = TimestampLib.blockTimestamp();
286
-
342
+ // release (remaining) collateral that was blocked by policy
287
343
  _poolService.releaseCollateral(
288
344
  instance,
345
+ address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
289
346
  policyNftId,
290
347
  policyInfo);
291
348
 
349
+ // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
350
+
351
+ // update policy state to closed
352
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
292
353
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
354
+
355
+ // TODO add logging
293
356
  }
294
357
 
295
358
 
296
- function _processPremiumByTreasury(
359
+ /// @dev calculates the premium and updates all counters in the other services
360
+ function _processPremium(
297
361
  IInstance instance,
298
- NftId policyNftId,
299
- Amount premiumExpectedAmount
362
+ NftId applicationNftId,
363
+ IPolicy.PolicyInfo memory applicationInfo,
364
+ IPolicy.PremiumInfo memory premium
300
365
  )
301
366
  internal
302
- returns (Amount netPremiumAmount)
367
+ virtual
303
368
  {
304
- // process token transfer(s)
305
- if(premiumExpectedAmount.eqz()) {
306
- return AmountLib.zero();
369
+ NftId productNftId = applicationInfo.productNftId;
370
+ InstanceReader instanceReader = instance.getInstanceReader();
371
+
372
+ // check if premium balance and allowance of policy holder is sufficient
373
+ {
374
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
375
+ address policyHolder = getRegistry().ownerOf(applicationNftId);
376
+
377
+ _checkPremiumBalanceAndAllowance(
378
+ tokenHandler.getToken(),
379
+ address(tokenHandler),
380
+ policyHolder,
381
+ premium.premiumAmount);
307
382
  }
308
383
 
309
- NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
310
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
311
- IPolicy.Premium memory premium = _pricingService.calculatePremium(
312
- productNftId,
313
- policyInfo.riskId,
314
- policyInfo.sumInsuredAmount,
315
- policyInfo.lifetime,
316
- policyInfo.applicationData,
317
- policyInfo.bundleNftId,
318
- policyInfo.referralId
319
- );
320
-
321
- if (premium.premiumAmount != premiumExpectedAmount.toInt()) {
322
- revert ErrorPolicyServicePremiumMismatch(
323
- policyNftId,
324
- premiumExpectedAmount,
325
- AmountLib.toAmount(premium.premiumAmount));
384
+ // update the counters
385
+ _processSale(
386
+ instanceReader,
387
+ instance.getInstanceStore(),
388
+ productNftId,
389
+ applicationInfo.bundleNftId,
390
+ applicationInfo.referralId,
391
+ premium);
392
+ }
393
+
394
+ function _activate(
395
+ NftId policyNftId,
396
+ IPolicy.PolicyInfo memory policyInfo,
397
+ Timestamp activateAt
398
+ )
399
+ internal
400
+ virtual
401
+ view
402
+ returns (IPolicy.PolicyInfo memory)
403
+ {
404
+ // fail if policy has already been activated and activateAt is different
405
+ if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
406
+ revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
326
407
  }
327
408
 
328
- address policyOwner = getRegistry().ownerOf(policyNftId);
329
- ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
330
- TokenHandler tokenHandler = productSetupInfo.tokenHandler;
331
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
332
- revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
409
+ // ignore if policy has already been activated and activateAt is the same
410
+ if (policyInfo.activatedAt == activateAt) {
411
+ return policyInfo;
333
412
  }
334
413
 
335
- Amount productFeeAmountToTransfer = AmountLib.toAmount(premium.productFeeFixAmount + premium.productFeeVarAmount);
336
- Amount distributionFeeAmountToTransfer = AmountLib.toAmount(premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount);
337
- uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
338
- uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
339
- Amount poolAmountToTransfer = AmountLib.toAmount(premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer);
414
+ policyInfo.activatedAt = activateAt;
415
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
340
416
 
341
- netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
417
+ return policyInfo;
418
+ }
342
419
 
343
- // move product fee to product wallet
344
- {
345
- address productWallet = productSetupInfo.wallet;
346
- tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
347
- }
420
+ /// @dev update counters by calling the involved services
421
+ function _processSale(
422
+ InstanceReader instanceReader,
423
+ InstanceStore instanceStore,
424
+ NftId productNftId,
425
+ NftId bundleNftId,
426
+ ReferralId referralId,
427
+ IPolicy.PremiumInfo memory premium
428
+ )
429
+ internal
430
+ virtual
431
+ {
432
+ (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
433
+ instanceReader,
434
+ productNftId);
435
+
436
+ // update product fees, distribution and pool fees
437
+ _componentService.increaseProductFees(
438
+ instanceStore,
439
+ productNftId,
440
+ premium.productFeeVarAmount + premium.productFeeFixAmount);
441
+
442
+ // update distribution fees and distributor commission and pool fees
443
+ _distributionService.processSale(
444
+ distributionNftId,
445
+ referralId,
446
+ premium);
447
+
448
+ // update pool and bundle fees
449
+ _poolService.processSale(
450
+ bundleNftId,
451
+ premium);
452
+ }
348
453
 
349
- // move distribution fee to distribution wallet
350
- {
351
- ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
352
- address distributionWallet = distributionSetupInfo.wallet;
353
- tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
354
- _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
355
- }
356
-
357
- // move netpremium, bundleFee and poolFee to pool wallet
358
- {
359
- address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
360
- tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
361
- _poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
454
+
455
+ /// @dev transfer the premium to the wallets the premium is distributed to
456
+ function _transferFunds(
457
+ InstanceReader instanceReader,
458
+ NftId policyNftId,
459
+ NftId productNftId,
460
+ IPolicy.PremiumInfo memory premium
461
+ )
462
+ internal
463
+ virtual
464
+ {
465
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
466
+ address policyHolder = getRegistry().ownerOf(policyNftId);
467
+
468
+ (
469
+ ,
470
+ address distributionWallet,
471
+ address poolWallet,
472
+ address productWallet
473
+ ) = _getDistributionNftAndWallets(
474
+ instanceReader,
475
+ productNftId);
476
+
477
+ tokenHandler.collectTokensToThreeRecipients(
478
+ policyHolder,
479
+ productWallet,
480
+ premium.productFeeAmount,
481
+ distributionWallet,
482
+ premium.distributionFeeAndCommissionAmount,
483
+ poolWallet,
484
+ premium.poolPremiumAndFeeAmount);
485
+ }
486
+
487
+
488
+ /// @dev checks that policy has been collateralized and has been activated.
489
+ /// does not check if policy has been expired or closed.
490
+ function _policyHasBeenActivated(
491
+ StateId policyState,
492
+ IPolicy.PolicyInfo memory policyInfo
493
+ )
494
+ internal
495
+ view
496
+ returns (bool)
497
+ {
498
+ if (policyState != COLLATERALIZED()) { return false; }
499
+ if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
500
+ return true;
501
+ }
502
+
503
+
504
+ /// @dev checks the balance and allowance of the policy holder
505
+ function _checkPremiumBalanceAndAllowance(
506
+ IERC20Metadata token,
507
+ address tokenHandlerAddress,
508
+ address policyHolder,
509
+ Amount premiumAmount
510
+ )
511
+ internal
512
+ virtual
513
+ view
514
+ {
515
+ uint256 premium = premiumAmount.toInt();
516
+ uint256 balance = token.balanceOf(policyHolder);
517
+ uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
518
+
519
+ if (balance < premium) {
520
+ revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
362
521
  }
363
522
 
364
- // validate total amount transferred
365
- {
366
- Amount totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
367
-
368
- if (premium.premiumAmount != totalTransferred.toInt()) {
369
- revert ErrorPolicyServiceTransferredPremiumMismatch(
370
- policyNftId,
371
- AmountLib.toAmount(premium.premiumAmount),
372
- totalTransferred);
373
- }
523
+ if (allowance < premium) {
524
+ revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
374
525
  }
526
+ }
375
527
 
376
- // TODO: add logging
528
+
529
+ function _getTokenHandler(
530
+ InstanceReader instanceReader,
531
+ NftId productNftId
532
+ )
533
+ internal
534
+ virtual
535
+ view
536
+ returns (
537
+ TokenHandler tokenHandler
538
+ )
539
+ {
540
+ tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
541
+ }
542
+
543
+ function _getDistributionNftAndWallets(
544
+ InstanceReader instanceReader,
545
+ NftId productNftId
546
+ )
547
+ internal
548
+ virtual
549
+ view returns (
550
+ NftId distributionNftId,
551
+ address distributionWallet,
552
+ address poolWallet,
553
+ address productWallet
554
+ )
555
+ {
556
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
557
+ distributionNftId = productInfo.distributionNftId;
558
+ distributionWallet = instanceReader.getComponentInfo(distributionNftId).wallet;
559
+ poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).wallet;
560
+ productWallet = instanceReader.getComponentInfo(productNftId).wallet;
561
+ }
562
+
563
+
564
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
565
+ IRegistry.ObjectInfo memory productInfo;
566
+ (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
567
+ product = Product(productInfo.objectAddress);
568
+ }
569
+
570
+
571
+ function _getDomain() internal pure override returns(ObjectType) {
572
+ return POLICY();
377
573
  }
378
574
  }