@etherisc/gif-next 0.0.2-f12cf4d-104 → 0.0.2-f13fd28-503

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