@etherisc/gif-next 0.0.2-e5a6af8-639 → 0.0.2-e5bdc7a-061

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