@etherisc/gif-next 0.0.2-93a7619-595 → 0.0.2-93ee1cf-782

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 (417) hide show
  1. package/README.md +27 -6
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +96 -37
  4. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  6. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -13
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  14. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  16. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  18. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  20. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +143 -182
  22. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +77 -17
  24. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +83 -98
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +175 -86
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +104 -60
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +73 -83
  32. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +52 -0
  34. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  35. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  36. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +113 -196
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +114 -22
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +215 -235
  41. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  42. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +81 -25
  43. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  45. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +155 -157
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +114 -129
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +230 -190
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +508 -228
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  53. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +147 -42
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +98 -30
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +53 -88
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +131 -42
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +168 -125
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -85
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +327 -84
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +113 -135
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +72 -40
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +172 -111
  72. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  73. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
  74. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  76. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  79. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  81. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  82. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  89. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +102 -141
  92. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +77 -17
  94. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +68 -78
  97. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  99. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +78 -93
  101. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +142 -79
  103. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +92 -36
  105. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +78 -121
  107. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  109. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +143 -214
  111. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  112. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +84 -84
  113. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +48 -57
  115. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +68 -117
  117. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  118. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +106 -88
  119. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  120. package/artifacts/contracts/pool/Pool.sol/Pool.json +78 -132
  121. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +195 -188
  123. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +87 -51
  125. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +114 -45
  127. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +68 -36
  129. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  130. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +123 -94
  131. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  132. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +77 -17
  133. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  134. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +175 -88
  135. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  136. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +97 -61
  137. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +63 -7
  139. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +66 -0
  141. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +67 -19
  143. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  144. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
  145. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  146. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +109 -75
  147. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  148. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
  149. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +174 -129
  151. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +96 -56
  153. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  154. package/artifacts/contracts/product/PricingService.sol/PricingService.json +165 -107
  155. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +85 -45
  157. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  158. package/artifacts/contracts/product/Product.sol/Product.json +119 -90
  159. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  160. package/artifacts/contracts/product/RiskService.sol/RiskService.json +76 -26
  161. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  162. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +66 -30
  163. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  164. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  165. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  166. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +72 -15
  167. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  168. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  169. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  170. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  171. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  172. package/artifacts/contracts/registry/Registry.sol/Registry.json +116 -51
  173. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +206 -165
  175. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +161 -61
  177. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +65 -29
  179. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  181. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  182. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +123 -225
  183. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  184. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  185. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  186. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  187. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  188. package/artifacts/contracts/shared/Component.sol/Component.json +76 -87
  189. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +442 -180
  191. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  192. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +115 -63
  193. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +42 -0
  195. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +402 -6
  197. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  198. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  199. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  200. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  201. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -72
  203. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  204. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
  205. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +68 -78
  207. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  209. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  210. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  211. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  213. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  215. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  216. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  217. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  218. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  219. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  220. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  221. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +78 -93
  222. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  223. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  224. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  225. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  226. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  227. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  228. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  229. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +18 -2
  230. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  231. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  232. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +66 -8
  234. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  235. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  236. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  237. package/artifacts/contracts/shared/Service.sol/Service.json +42 -0
  238. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  239. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
  240. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  241. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  242. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  243. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  244. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  245. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +84 -108
  246. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  247. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  248. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  250. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  251. package/artifacts/contracts/staking/Staking.sol/Staking.json +154 -187
  252. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  254. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +81 -51
  256. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  258. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +82 -53
  260. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  261. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +69 -33
  262. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  263. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
  264. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  265. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  266. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  267. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  271. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  273. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  276. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  277. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  278. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  280. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  281. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  282. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  284. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  286. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  288. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  290. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +43 -5
  292. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  294. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  299. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  305. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  306. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  307. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +44 -12
  308. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  309. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  310. package/contracts/authorization/AccessAdmin.sol +86 -62
  311. package/contracts/authorization/Authorization.sol +106 -38
  312. package/contracts/authorization/IAccess.sol +1 -0
  313. package/contracts/authorization/IAccessAdmin.sol +4 -2
  314. package/contracts/authorization/IAuthorization.sol +13 -7
  315. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  316. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  317. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  318. package/contracts/distribution/BasicDistribution.sol +4 -3
  319. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  320. package/contracts/distribution/Distribution.sol +11 -22
  321. package/contracts/distribution/DistributionService.sol +69 -51
  322. package/contracts/distribution/IDistributionComponent.sol +1 -1
  323. package/contracts/distribution/IDistributionService.sol +5 -6
  324. package/contracts/examples/fire/FirePool.sol +19 -8
  325. package/contracts/examples/fire/FireProduct.sol +33 -13
  326. package/contracts/examples/fire/FireProductAuthorization.sol +1 -2
  327. package/contracts/examples/unpermissioned/SimpleDistribution.sol +12 -4
  328. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -4
  329. package/contracts/examples/unpermissioned/SimplePool.sol +38 -6
  330. package/contracts/examples/unpermissioned/SimpleProduct.sol +17 -23
  331. package/contracts/instance/BundleSet.sol +38 -34
  332. package/contracts/instance/IInstance.sol +10 -1
  333. package/contracts/instance/IInstanceService.sol +7 -25
  334. package/contracts/instance/Instance.sol +34 -22
  335. package/contracts/instance/InstanceAdmin.sol +20 -30
  336. package/contracts/instance/InstanceAuthorizationV3.sol +38 -25
  337. package/contracts/instance/InstanceReader.sol +85 -1
  338. package/contracts/instance/InstanceService.sol +46 -87
  339. package/contracts/instance/RiskSet.sol +119 -0
  340. package/contracts/instance/base/ObjectLifecycle.sol +1 -1
  341. package/contracts/instance/base/ObjectSet.sol +24 -25
  342. package/contracts/instance/module/IComponents.sol +7 -5
  343. package/contracts/instance/module/IPolicy.sol +2 -1
  344. package/contracts/instance/module/IRisk.sol +1 -0
  345. package/contracts/oracle/BasicOracle.sol +0 -1
  346. package/contracts/oracle/IOracleService.sol +2 -1
  347. package/contracts/oracle/Oracle.sol +4 -15
  348. package/contracts/oracle/OracleService.sol +103 -75
  349. package/contracts/pool/BasicPool.sol +33 -24
  350. package/contracts/pool/BasicPoolAuthorization.sol +12 -2
  351. package/contracts/pool/BundleService.sol +60 -98
  352. package/contracts/pool/IBundleService.sol +2 -23
  353. package/contracts/pool/IPoolComponent.sol +1 -7
  354. package/contracts/pool/IPoolService.sol +12 -30
  355. package/contracts/pool/Pool.sol +118 -126
  356. package/contracts/pool/PoolService.sol +191 -142
  357. package/contracts/product/ApplicationService.sol +21 -13
  358. package/contracts/product/BasicProduct.sol +8 -12
  359. package/contracts/product/BasicProductAuthorization.sol +0 -1
  360. package/contracts/product/ClaimService.sol +113 -51
  361. package/contracts/product/IApplicationService.sol +5 -2
  362. package/contracts/product/IClaimService.sol +7 -0
  363. package/contracts/product/IPolicyService.sol +17 -7
  364. package/contracts/product/IPricingService.sol +9 -9
  365. package/contracts/product/IProductComponent.sol +6 -0
  366. package/contracts/product/PolicyService.sol +241 -194
  367. package/contracts/product/PricingService.sol +8 -8
  368. package/contracts/product/Product.sol +56 -61
  369. package/contracts/product/RiskService.sol +14 -3
  370. package/contracts/registry/ChainNft.sol +6 -9
  371. package/contracts/registry/IRegistry.sol +6 -3
  372. package/contracts/registry/IRegistryService.sol +6 -4
  373. package/contracts/registry/ITransferInterceptor.sol +1 -2
  374. package/contracts/registry/Registry.sol +22 -4
  375. package/contracts/registry/RegistryAdmin.sol +21 -34
  376. package/contracts/registry/RegistryService.sol +37 -55
  377. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  378. package/contracts/registry/ReleaseRegistry.sol +202 -208
  379. package/contracts/registry/ServiceAuthorizationV3.sol +17 -40
  380. package/contracts/shared/Component.sol +47 -106
  381. package/contracts/shared/ComponentService.sol +322 -157
  382. package/contracts/shared/ComponentVerifyingService.sol +27 -15
  383. package/contracts/shared/ContractLib.sol +196 -10
  384. package/contracts/shared/IComponent.sol +10 -16
  385. package/contracts/shared/IComponentService.sol +38 -16
  386. package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
  387. package/contracts/shared/ILifecycle.sol +3 -1
  388. package/contracts/shared/INftOwnable.sol +2 -0
  389. package/contracts/shared/IRegisterable.sol +11 -0
  390. package/contracts/shared/InstanceLinkedComponent.sol +66 -32
  391. package/contracts/shared/KeyValueStore.sol +1 -1
  392. package/contracts/shared/Lifecycle.sol +15 -4
  393. package/contracts/shared/NftOwnable.sol +23 -3
  394. package/contracts/shared/Registerable.sol +15 -7
  395. package/contracts/shared/RegistryLinked.sol +6 -12
  396. package/contracts/shared/Service.sol +4 -7
  397. package/contracts/shared/TokenHandler.sol +316 -66
  398. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  399. package/contracts/staking/IStaking.sol +9 -4
  400. package/contracts/staking/IStakingService.sol +0 -3
  401. package/contracts/staking/Staking.sol +31 -24
  402. package/contracts/staking/StakingService.sol +56 -23
  403. package/contracts/type/Key32.sol +2 -2
  404. package/contracts/type/Key32Set.sol +62 -0
  405. package/contracts/type/NftId.sol +6 -0
  406. package/contracts/type/ObjectType.sol +2 -0
  407. package/contracts/type/RiskId.sol +18 -6
  408. package/contracts/type/RoleId.sol +0 -12
  409. package/contracts/type/StateId.sol +14 -1
  410. package/contracts/upgradeability/ProxyManager.sol +2 -1
  411. package/package.json +3 -3
  412. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  413. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  414. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  415. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  416. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  417. package/contracts/authorization/ModuleAuthorization.sol +0 -78
@@ -3,48 +3,38 @@ 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 {IComponentService} from "../shared/IComponentService.sol";
8
7
  import {IComponents} from "../instance/module/IComponents.sol";
8
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
9
+ import {InstanceReader} from "../instance/InstanceReader.sol";
10
+ import {InstanceStore} from "../instance/InstanceStore.sol";
9
11
  import {IInstance} from "../instance/IInstance.sol";
10
12
  import {IPolicy} from "../instance/module/IPolicy.sol";
13
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
14
+ import {IPolicyService} from "./IPolicyService.sol";
15
+ import {IPoolService} from "../pool/IPoolService.sol";
16
+ import {IPricingService} from "./IPricingService.sol";
17
+ import {IRegistry} from "../registry/IRegistry.sol";
11
18
 
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";
19
+ import {Amount} from "../type/Amount.sol";
17
20
  import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
18
- import {NftId, NftIdLib} from "../type/NftId.sol";
21
+ import {ContractLib} from "../shared/ContractLib.sol";
22
+ import {NftId} from "../type/NftId.sol";
23
+ import {ObjectType, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, PRICE} from "../type/ObjectType.sol";
19
24
  import {ReferralId} from "../type/Referral.sol";
25
+ import {RiskId} from "../type/RiskId.sol";
26
+ import {Service} from "../shared/Service.sol";
20
27
  import {StateId} from "../type/StateId.sol";
28
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
29
+ import {TokenHandler} from "../shared/TokenHandler.sol";
21
30
  import {VersionPart} from "../type/Version.sol";
22
31
 
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
32
 
37
33
  contract PolicyService is
38
- ComponentVerifyingService,
34
+ Service,
39
35
  IPolicyService
40
36
  {
41
- using NftIdLib for NftId;
42
- using TimestampLib for Timestamp;
43
-
44
- IApplicationService internal _applicationService;
45
37
  IComponentService internal _componentService;
46
- IBundleService internal _bundleService;
47
- IClaimService internal _claimService;
48
38
  IDistributionService internal _distributionService;
49
39
  IPoolService internal _poolService;
50
40
  IPricingService internal _pricingService;
@@ -65,10 +55,7 @@ contract PolicyService is
65
55
  _initializeService(registryAddress, authority, owner);
66
56
 
67
57
  VersionPart majorVersion = getVersion().toMajorPart();
68
- _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
69
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
70
58
  _componentService = IComponentService(getRegistry().getServiceAddress(COMPONENT(), majorVersion));
71
- _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
72
59
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
73
60
  _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
74
61
  _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
@@ -84,24 +71,15 @@ contract PolicyService is
84
71
  virtual
85
72
  nonReentrant()
86
73
  {
87
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
88
- InstanceReader instanceReader = instance.getInstanceReader();
74
+ // checks
75
+ (IInstance instance,,) = _getAndVerifyCallerForPolicy(applicationNftId);
89
76
 
90
77
  // check policy is in state applied
91
- if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
78
+ if (instance.getInstanceReader().getPolicyState(applicationNftId) != APPLIED()) {
92
79
  revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
93
80
  }
94
81
 
95
- // check policy matches with calling product
96
- IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
97
- if(applicationInfo.productNftId != productNftId) {
98
- revert ErrorPolicyServicePolicyProductMismatch(
99
- applicationNftId,
100
- applicationInfo.productNftId,
101
- productNftId);
102
- }
103
-
104
-
82
+ // effects
105
83
  // store updated policy info
106
84
  instance.getInstanceStore().updatePolicyState(
107
85
  applicationNftId,
@@ -119,25 +97,22 @@ contract PolicyService is
119
97
  external
120
98
  virtual
121
99
  nonReentrant()
100
+ returns (Amount premiumAmount)
122
101
  {
123
- // check caller is registered product
124
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
125
- InstanceReader instanceReader = instance.getInstanceReader();
102
+ // checks
103
+ (
104
+ IInstance instance,
105
+ NftId productNftId,
106
+ IPolicy.PolicyInfo memory applicationInfo
107
+ ) = _getAndVerifyCallerForPolicy(applicationNftId);
126
108
 
127
109
  // check policy is in state applied
110
+ InstanceReader instanceReader = instance.getInstanceReader();
128
111
  if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
129
112
  revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
130
113
  }
131
114
 
132
- // check policy matches with calling product
133
- IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
134
- if(applicationInfo.productNftId != productNftId) {
135
- revert ErrorPolicyServicePolicyProductMismatch(
136
- applicationNftId,
137
- applicationInfo.productNftId,
138
- productNftId);
139
- }
140
-
115
+ // effects
141
116
  // actual collateralizaion
142
117
  _poolService.lockCollateral(
143
118
  instance,
@@ -148,11 +123,8 @@ contract PolicyService is
148
123
  applicationInfo.sumInsuredAmount);
149
124
 
150
125
  // optional activation of policy
151
- if(activateAt > zeroTimestamp()) {
152
- applicationInfo = _activate(
153
- applicationNftId,
154
- applicationInfo,
155
- activateAt);
126
+ if(activateAt > TimestampLib.zero()) {
127
+ applicationInfo = _activate(applicationNftId, applicationInfo, activateAt);
156
128
  }
157
129
 
158
130
  // update policy and set state to collateralized
@@ -162,35 +134,42 @@ contract PolicyService is
162
134
  COLLATERALIZED());
163
135
 
164
136
  // calculate and store premium
137
+ RiskId riskId = applicationInfo.riskId;
138
+ NftId bundleNftId = applicationInfo.bundleNftId;
139
+
165
140
  IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
166
141
  productNftId,
167
- applicationInfo.riskId,
142
+ riskId,
168
143
  applicationInfo.sumInsuredAmount,
169
144
  applicationInfo.lifetime,
170
145
  applicationInfo.applicationData,
171
- applicationInfo.bundleNftId,
146
+ bundleNftId,
172
147
  applicationInfo.referralId);
173
148
 
149
+ premiumAmount = premium.fullPremiumAmount;
174
150
  instance.getInstanceStore().createPremium(
175
151
  applicationNftId,
176
152
  premium);
177
153
 
178
- // update referral counter
154
+ // update referral counter if product has linked distributino component
179
155
  {
180
156
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
181
-
182
- if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
157
+ if (productInfo.hasDistribution) {
183
158
  _distributionService.processReferral(
184
159
  productInfo.distributionNftId,
185
160
  applicationInfo.referralId);
186
161
  }
187
162
  }
188
163
 
164
+ // link policy to risk and bundle
165
+ NftId poolNftId = getRegistry().getObjectInfo(bundleNftId).parentNftId;
166
+ instance.getRiskSet().linkPolicy(productNftId, riskId, applicationNftId);
167
+ instance.getBundleSet().linkPolicy(poolNftId, bundleNftId, applicationNftId);
168
+
189
169
  // log policy creation before interactions with token and policy holder
190
170
  emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
191
171
 
192
- // TODO add calling pool contract if it needs to validate application
193
-
172
+ // interactions
194
173
  // callback to policy holder if applicable
195
174
  _policyHolderPolicyActivated(applicationNftId, activateAt);
196
175
  }
@@ -205,28 +184,40 @@ contract PolicyService is
205
184
  virtual
206
185
  nonReentrant()
207
186
  {
208
- // check caller is registered product
209
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
210
- InstanceReader instanceReader = instance.getInstanceReader();
211
- StateId stateId = instanceReader.getPolicyState(policyNftId);
187
+ // checks
188
+ (
189
+ IInstance instance,
190
+ NftId productNftId,
191
+ IPolicy.PolicyInfo memory policyInfo
192
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
212
193
 
213
- // check policy is in state collateralized or active
214
- if (!(stateId == COLLATERALIZED())) {
194
+ // check policy is in state collateralized
195
+ InstanceReader instanceReader = instance.getInstanceReader();
196
+ if (instanceReader.getPolicyState(policyNftId) != COLLATERALIZED()) {
215
197
  revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
216
198
  }
217
199
 
218
- // check if premium is already collected
200
+ // check if premium has already been collected
219
201
  if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
220
202
  revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
221
203
  }
222
204
 
223
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
224
- IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
225
-
226
- _processPremium(
227
- instance,
228
- policyNftId,
229
- policyInfo,
205
+ // check funds and allowance of policy holder
206
+ IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
207
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, policyInfo.productNftId);
208
+ _checkPremiumBalanceAndAllowance(
209
+ tokenHandler.TOKEN(),
210
+ address(tokenHandler),
211
+ getRegistry().ownerOf(policyNftId),
212
+ premium.premiumAmount);
213
+
214
+ // effects
215
+ _processSale(
216
+ instanceReader,
217
+ instance.getInstanceStore(),
218
+ productNftId,
219
+ policyInfo.bundleNftId,
220
+ policyInfo.referralId,
230
221
  premium);
231
222
 
232
223
  // optionally activate policy
@@ -240,27 +231,31 @@ contract PolicyService is
240
231
  // log premium collection before interactions with token
241
232
  emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
242
233
 
234
+ // interactions
243
235
  _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
244
236
  }
245
237
 
238
+
246
239
  /// @inheritdoc IPolicyService
247
240
  function activate(NftId policyNftId, Timestamp activateAt)
248
241
  external
249
242
  virtual
250
243
  nonReentrant()
251
244
  {
252
- // check caller is registered product
253
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
254
- InstanceReader instanceReader = instance.getInstanceReader();
245
+ // checks
246
+ (
247
+ IInstance instance,,
248
+ IPolicy.PolicyInfo memory policyInfo
249
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
255
250
 
256
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
251
+ // effects
257
252
  policyInfo = _activate(policyNftId, policyInfo, activateAt);
258
-
259
253
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
260
254
 
261
255
  // log policy activation before interactions with policy holder
262
256
  emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
263
257
 
258
+ // interactions
264
259
  // callback to policy holder if applicable
265
260
  _policyHolderPolicyActivated(policyNftId, activateAt);
266
261
  }
@@ -276,24 +271,22 @@ contract PolicyService is
276
271
  nonReentrant()
277
272
  returns (Timestamp expiredAt)
278
273
  {
279
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
280
-
281
- // check policy matches with calling product
282
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
283
- if(policyInfo.productNftId != productNftId) {
284
- revert ErrorPolicyServicePolicyProductMismatch(
285
- policyNftId,
286
- policyInfo.productNftId,
287
- productNftId);
288
- }
274
+ // checks
275
+ (
276
+ IInstance instance,,
277
+ IPolicy.PolicyInfo memory policyInfo
278
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
289
279
 
280
+ // more checks, effects + interactions
290
281
  return _expire(
291
282
  instance,
292
283
  policyNftId,
284
+ policyInfo,
293
285
  expireAt
294
286
  );
295
287
  }
296
288
 
289
+
297
290
  /// @inheritdoc IPolicyService
298
291
  function expirePolicy(
299
292
  IInstance instance,
@@ -305,26 +298,112 @@ contract PolicyService is
305
298
  nonReentrant()
306
299
  returns (Timestamp expiredAt)
307
300
  {
301
+ // checks
302
+ _checkNftType(policyNftId, POLICY());
303
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(
304
+ policyNftId);
305
+
306
+ // more checks, effects + interactions
308
307
  return _expire(
309
308
  instance,
310
309
  policyNftId,
310
+ policyInfo,
311
311
  expireAt
312
312
  );
313
313
  }
314
314
 
315
+
316
+ /// @inheritdoc IPolicyService
317
+ function close(
318
+ NftId policyNftId
319
+ )
320
+ external
321
+ virtual
322
+ nonReentrant()
323
+ {
324
+ // checks
325
+ (
326
+ IInstance instance,
327
+ NftId productNftId,
328
+ IPolicy.PolicyInfo memory policyInfo
329
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
330
+ InstanceReader instanceReader = instance.getInstanceReader();
331
+
332
+ // check policy is in a closeable state
333
+ if (!policyIsCloseable(instanceReader, policyNftId)) {
334
+ revert ErrorPolicyServicePolicyNotCloseable(policyNftId);
335
+ }
336
+
337
+ // check that policy has been activated
338
+ RiskId riskId = policyInfo.riskId;
339
+ NftId bundleNftId = policyInfo.bundleNftId;
340
+
341
+ if (instanceReader.getPremiumInfoState(policyNftId) != PAID()) {
342
+ revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
343
+ }
344
+
345
+ // effects
346
+ // release (remaining) collateral that was blocked by policy
347
+ _poolService.releaseCollateral(
348
+ instance,
349
+ address(instanceReader.getComponentInfo(productNftId).token),
350
+ policyNftId,
351
+ policyInfo);
352
+
353
+ // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
354
+
355
+ // update policy state to closed
356
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
357
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
358
+
359
+ // unlink policy from risk and bundle
360
+ NftId poolNftId = getRegistry().getObjectInfo(bundleNftId).parentNftId;
361
+ instance.getRiskSet().unlinkPolicy(productNftId, riskId, policyNftId);
362
+ instance.getBundleSet().unlinkPolicy(poolNftId, bundleNftId, policyNftId);
363
+
364
+ emit LogPolicyServicePolicyClosed(policyNftId);
365
+ }
366
+
367
+
368
+ function policyIsCloseable(InstanceReader instanceReader, NftId policyNftId)
369
+ public
370
+ view
371
+ returns (bool isCloseable)
372
+ {
373
+ // policy already closed
374
+ if (instanceReader.getPolicyState(policyNftId) == CLOSED()) {
375
+ return false;
376
+ }
377
+
378
+ IPolicy.PolicyInfo memory info = instanceReader.getPolicyInfo(policyNftId);
379
+
380
+ if (info.productNftId.eqz()) { return false; } // not closeable: policy does not exist (or does not belong to this instance)
381
+ if (info.activatedAt.eqz()) { return false; } // not closeable: not yet activated
382
+ if (info.openClaimsCount > 0) { return false; } // not closeable: has open claims
383
+
384
+ // closeable: if sum of claims matches sum insured a policy may be closed prior to the expiry date
385
+ if (info.claimAmount == info.sumInsuredAmount) { return true; }
386
+
387
+ // not closeable: not yet expired
388
+ if (TimestampLib.blockTimestamp() < info.expiredAt) { return false; }
389
+
390
+ // all conditions to close the policy are met
391
+ return true;
392
+ }
393
+
394
+ /// @dev shared functionality for expire() and policyExpire().
315
395
  function _expire(
316
396
  IInstance instance,
317
397
  NftId policyNftId,
398
+ IPolicy.PolicyInfo memory policyInfo,
318
399
  Timestamp expireAt
319
400
  )
320
401
  internal
321
402
  returns (Timestamp expiredAt)
322
403
  {
323
- InstanceReader instanceReader = instance.getInstanceReader();
324
-
404
+ // checks
325
405
  // check policy is active
326
- StateId policyState = instanceReader.getPolicyState(policyNftId);
327
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
406
+ StateId policyState = instance.getInstanceReader().getPolicyState(policyNftId);
328
407
  if (!_policyHasBeenActivated(policyState, policyInfo)) {
329
408
  revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
330
409
  }
@@ -341,10 +420,12 @@ contract PolicyService is
341
420
  if (expiredAt >= policyInfo.expiredAt) {
342
421
  revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
343
422
  }
423
+
344
424
  if (expiredAt < TimestampLib.blockTimestamp()) {
345
425
  revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
346
426
  }
347
427
 
428
+ // effects
348
429
  // update policyInfo with new expiredAt timestamp
349
430
  Timestamp originalExpiredAt = policyInfo.expiredAt;
350
431
  policyInfo.expiredAt = expiredAt;
@@ -352,95 +433,33 @@ contract PolicyService is
352
433
 
353
434
  emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
354
435
 
436
+ // interactions
355
437
  // callback to policy holder if applicable
356
438
  _policyHolderPolicyExpired(policyNftId, expiredAt);
357
439
  }
358
440
 
441
+ // TODO cleanup
442
+ // /// @dev Calculates the premium and updates all counters in the other services.
443
+ // /// Only book keeping, no token transfers.
444
+ // function _processPremium(
445
+ // IInstance instance,
446
+ // NftId applicationNftId,
447
+ // IPolicy.PolicyInfo memory applicationInfo,
448
+ // IPolicy.PremiumInfo memory premium
449
+ // )
450
+ // internal
451
+ // virtual
452
+ // {
453
+ // // update the counters
454
+ // _processSale(
455
+ // instanceReader,
456
+ // instance.getInstanceStore(),
457
+ // productNftId,
458
+ // applicationInfo.bundleNftId,
459
+ // applicationInfo.referralId,
460
+ // premium);
461
+ // }
359
462
 
360
- function close(
361
- NftId policyNftId
362
- )
363
- external
364
- virtual
365
- nonReentrant()
366
- {
367
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
368
- InstanceReader instanceReader = instance.getInstanceReader();
369
-
370
- // check that policy has been activated
371
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
372
- StateId policyState = instanceReader.getPolicyState(policyNftId);
373
- if (!_policyHasBeenActivated(policyState, policyInfo)) {
374
- revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
375
- }
376
-
377
- // check that policy has not already been closed
378
- if (policyInfo.closedAt.gtz()) {
379
- revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
380
- }
381
-
382
- // check that policy does not have any open claims
383
- if (policyInfo.openClaimsCount > 0) {
384
- revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
385
- }
386
-
387
- // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
388
- // TODO consider to remove requirement for fully paid premiums altogether
389
- if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
390
- revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
391
- }
392
-
393
- // release (remaining) collateral that was blocked by policy
394
- _poolService.releaseCollateral(
395
- instance,
396
- address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
397
- policyNftId,
398
- policyInfo);
399
-
400
- // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
401
-
402
- // update policy state to closed
403
- policyInfo.closedAt = TimestampLib.blockTimestamp();
404
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
405
-
406
- emit LogPolicyServicePolicyClosed(policyNftId);
407
- }
408
-
409
-
410
- /// @dev calculates the premium and updates all counters in the other services
411
- function _processPremium(
412
- IInstance instance,
413
- NftId applicationNftId,
414
- IPolicy.PolicyInfo memory applicationInfo,
415
- IPolicy.PremiumInfo memory premium
416
- )
417
- internal
418
- virtual
419
- {
420
- NftId productNftId = applicationInfo.productNftId;
421
- InstanceReader instanceReader = instance.getInstanceReader();
422
-
423
- // check if premium balance and allowance of policy holder is sufficient
424
- {
425
- TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
426
- address policyHolder = getRegistry().ownerOf(applicationNftId);
427
-
428
- _checkPremiumBalanceAndAllowance(
429
- tokenHandler.getToken(),
430
- address(tokenHandler),
431
- policyHolder,
432
- premium.premiumAmount);
433
- }
434
-
435
- // update the counters
436
- _processSale(
437
- instanceReader,
438
- instance.getInstanceStore(),
439
- productNftId,
440
- applicationInfo.bundleNftId,
441
- applicationInfo.referralId,
442
- premium);
443
- }
444
463
 
445
464
  function _activate(
446
465
  NftId policyNftId,
@@ -480,7 +499,7 @@ contract PolicyService is
480
499
  internal
481
500
  virtual
482
501
  {
483
- (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
502
+ (NftId distributionNftId,,,) = _getDistributionNftAndWallets(
484
503
  instanceReader,
485
504
  productNftId);
486
505
 
@@ -666,17 +685,45 @@ contract PolicyService is
666
685
  )
667
686
  {
668
687
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
669
- distributionNftId = productInfo.distributionNftId;
670
- distributionWallet = instanceReader.getComponentInfo(distributionNftId).wallet;
671
- poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).wallet;
672
- productWallet = instanceReader.getComponentInfo(productNftId).wallet;
688
+ productWallet = instanceReader.getComponentInfo(productNftId).tokenHandler.getWallet();
689
+ poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).tokenHandler.getWallet();
690
+
691
+ if (productInfo.hasDistribution) {
692
+ distributionNftId = productInfo.distributionNftId;
693
+ distributionWallet = instanceReader.getComponentInfo(distributionNftId).tokenHandler.getWallet();
694
+ }
673
695
  }
674
696
 
675
697
 
676
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
677
- IRegistry.ObjectInfo memory productInfo;
678
- (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
679
- product = Product(productInfo.objectAddress);
698
+ function _getAndVerifyCallerForPolicy(NftId policyNftId)
699
+ internal
700
+ virtual
701
+ view
702
+ returns (
703
+ IInstance instance,
704
+ NftId productNftId,
705
+ IPolicy.PolicyInfo memory policyInfo
706
+ )
707
+ {
708
+ (
709
+ IRegistry.ObjectInfo memory productInfo,
710
+ address instanceAddress
711
+ ) = ContractLib.getAndVerifyComponent(
712
+ getRegistry(),
713
+ msg.sender, // caller contract
714
+ PRODUCT(), // caller must be product
715
+ true); // only active caller
716
+
717
+ productNftId = productInfo.nftId;
718
+ instance = IInstance(instanceAddress);
719
+ policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
720
+
721
+ if (policyInfo.productNftId != productNftId) {
722
+ revert ErrorPolicyServicePolicyProductMismatch(
723
+ policyNftId,
724
+ productNftId,
725
+ policyInfo.productNftId);
726
+ }
680
727
  }
681
728
 
682
729