@etherisc/gif-next 0.0.2-f7d1200-068 → 0.0.2-f7fa064-035

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