@etherisc/gif-next 0.0.2-f12cf4d-104 → 0.0.2-f13d67f-541

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