@etherisc/gif-next 0.0.2-f13c010-035 → 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 (560) hide show
  1. package/README.md +90 -317
  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 +132 -300
  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 +64 -173
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +585 -231
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +190 -78
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +44 -135
  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 +160 -224
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +426 -52
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +308 -337
  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 +215 -257
  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 +95 -165
  73. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  74. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +278 -233
  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 +946 -466
  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 +417 -17
  91. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  92. package/artifacts/contracts/instance/Instance.sol/Instance.json +615 -105
  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 +1127 -557
  99. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +434 -81
  101. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +119 -49
  103. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  104. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1286 -1925
  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 +83 -175
  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 +48 -74
  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 +67 -111
  137. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  138. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +157 -81
  139. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +154 -46
  141. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  142. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +106 -173
  143. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  144. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +426 -52
  145. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  146. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +317 -344
  147. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +144 -92
  149. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  150. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +219 -146
  151. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  152. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +63 -128
  153. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  154. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +380 -214
  155. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  156. package/artifacts/contracts/pool/Pool.sol/Pool.json +76 -159
  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 +621 -413
  161. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  162. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +186 -66
  163. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  164. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +327 -62
  165. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  166. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +143 -43
  167. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  168. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +199 -223
  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 +294 -189
  173. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +151 -83
  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 +167 -56
  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 +175 -181
  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 +296 -194
  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 +169 -77
  193. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  194. package/artifacts/contracts/product/PricingService.sol/PricingService.json +139 -114
  195. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  196. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +131 -59
  197. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  198. package/artifacts/contracts/product/Product.sol/Product.json +193 -217
  199. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  200. package/artifacts/contracts/product/RiskService.sol/RiskService.json +338 -87
  201. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  202. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +141 -41
  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 +78 -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 +116 -57
  214. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  215. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +848 -479
  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 +89 -37
  220. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  221. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +119 -39
  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 +66 -96
  234. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  235. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +308 -542
  236. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  237. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +155 -83
  238. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  239. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +544 -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 +48 -60
  248. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  249. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +171 -356
  250. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  251. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +48 -74
  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 +66 -110
  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 +289 -112
  280. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  281. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  282. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  283. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +70 -30
  284. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  285. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1446 -164
  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 +1583 -296
  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 +160 -69
  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 +257 -162
  300. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  301. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +122 -46
  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 +95 -25
  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 +21 -8
  388. package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
  389. package/contracts/examples/fire/FireProduct.sol +38 -20
  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 +39 -8
  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 +32 -6
  404. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  405. package/contracts/examples/unpermissioned/SimpleProduct.sol +132 -46
  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 +61 -14
  412. package/contracts/instance/Instance.sol +184 -65
  413. package/contracts/instance/InstanceAdmin.sol +221 -193
  414. package/contracts/instance/InstanceAuthorizationV3.sol +153 -72
  415. package/contracts/instance/InstanceReader.sol +447 -314
  416. package/contracts/instance/InstanceService.sol +315 -214
  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 +19 -10
  429. package/contracts/instance/module/IDistribution.sol +21 -8
  430. package/contracts/instance/module/IPolicy.sol +28 -7
  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 -79
  438. package/contracts/oracle/OracleServiceManager.sol +1 -1
  439. package/contracts/pool/BasicPool.sol +26 -19
  440. package/contracts/pool/BasicPoolAuthorization.sol +34 -10
  441. package/contracts/pool/BundleService.sol +75 -182
  442. package/contracts/pool/BundleServiceManager.sol +1 -1
  443. package/contracts/pool/IBundleService.sol +28 -55
  444. package/contracts/pool/IPoolComponent.sol +1 -7
  445. package/contracts/pool/IPoolService.sol +65 -62
  446. package/contracts/pool/Pool.sol +111 -115
  447. package/contracts/pool/PoolLib.sol +341 -0
  448. package/contracts/pool/PoolService.sol +299 -229
  449. package/contracts/pool/PoolServiceManager.sol +1 -1
  450. package/contracts/product/ApplicationService.sol +93 -25
  451. package/contracts/product/ApplicationServiceManager.sol +1 -1
  452. package/contracts/product/BasicProduct.sol +10 -15
  453. package/contracts/product/BasicProductAuthorization.sol +33 -11
  454. package/contracts/product/ClaimService.sol +221 -207
  455. package/contracts/product/ClaimServiceManager.sol +1 -1
  456. package/contracts/product/IApplicationService.sol +28 -3
  457. package/contracts/product/IClaimService.sol +18 -5
  458. package/contracts/product/IPolicyService.sol +34 -12
  459. package/contracts/product/IPricingService.sol +1 -0
  460. package/contracts/product/IProductComponent.sol +4 -1
  461. package/contracts/product/IRiskService.sol +25 -10
  462. package/contracts/product/PolicyService.sol +260 -306
  463. package/contracts/product/PolicyServiceLib.sol +139 -0
  464. package/contracts/product/PolicyServiceManager.sol +1 -1
  465. package/contracts/product/PricingService.sol +52 -46
  466. package/contracts/product/PricingServiceManager.sol +3 -3
  467. package/contracts/product/Product.sol +106 -70
  468. package/contracts/product/RiskService.sol +130 -37
  469. package/contracts/product/RiskServiceManager.sol +1 -1
  470. package/contracts/registry/ChainNft.sol +4 -2
  471. package/contracts/registry/IRegistry.sol +25 -24
  472. package/contracts/registry/IRelease.sol +29 -0
  473. package/contracts/registry/Registry.sol +31 -12
  474. package/contracts/registry/RegistryAdmin.sol +94 -369
  475. package/contracts/registry/RegistryAuthorization.sol +337 -0
  476. package/contracts/registry/RegistryService.sol +4 -4
  477. package/contracts/registry/RegistryServiceManager.sol +1 -1
  478. package/contracts/registry/ReleaseAdmin.sol +199 -0
  479. package/contracts/registry/ReleaseLifecycle.sol +2 -0
  480. package/contracts/registry/ReleaseRegistry.sol +158 -134
  481. package/contracts/registry/ServiceAuthorizationV3.sol +200 -52
  482. package/contracts/registry/TokenRegistry.sol +61 -59
  483. package/contracts/shared/Component.sol +58 -119
  484. package/contracts/shared/ComponentService.sol +400 -395
  485. package/contracts/shared/ComponentServiceManager.sol +1 -1
  486. package/contracts/shared/ContractLib.sol +277 -3
  487. package/contracts/shared/IComponent.sol +2 -18
  488. package/contracts/shared/IComponentService.sol +28 -38
  489. package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
  490. package/contracts/shared/INftOwnable.sol +2 -0
  491. package/contracts/shared/IRegisterable.sol +15 -5
  492. package/contracts/shared/IService.sol +3 -5
  493. package/contracts/shared/InitializableERC165.sol +9 -1
  494. package/contracts/shared/InstanceLinkedComponent.sol +63 -44
  495. package/contracts/shared/NftOwnable.sol +8 -6
  496. package/contracts/shared/PolicyHolder.sol +4 -3
  497. package/contracts/shared/Registerable.sol +41 -20
  498. package/contracts/shared/RegistryLinked.sol +7 -13
  499. package/contracts/shared/Service.sol +13 -30
  500. package/contracts/shared/TokenHandler.sol +264 -105
  501. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  502. package/contracts/staking/IStaking.sol +270 -72
  503. package/contracts/staking/IStakingService.sol +45 -75
  504. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  505. package/contracts/staking/Staking.sol +522 -222
  506. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +55 -84
  507. package/contracts/staking/StakingManager.sol +4 -3
  508. package/contracts/staking/StakingReader.sol +58 -77
  509. package/contracts/staking/StakingService.sol +62 -148
  510. package/contracts/staking/StakingServiceManager.sol +6 -4
  511. package/contracts/staking/StakingStore.sol +1093 -330
  512. package/contracts/staking/TargetHandler.sol +132 -0
  513. package/contracts/staking/TargetManagerLib.sol +69 -46
  514. package/contracts/type/Amount.sol +4 -0
  515. package/contracts/type/Blocknumber.sol +17 -22
  516. package/contracts/type/ChainId.sol +101 -0
  517. package/contracts/type/Fee.sol +8 -8
  518. package/contracts/type/Key32.sol +2 -2
  519. package/contracts/type/Key32Set.sol +62 -0
  520. package/contracts/type/NftId.sol +6 -0
  521. package/contracts/type/ObjectType.sol +70 -68
  522. package/contracts/type/Referral.sol +6 -0
  523. package/contracts/type/RequestIdSet.sol +62 -0
  524. package/contracts/type/RiskId.sol +26 -8
  525. package/contracts/type/RoleId.sol +63 -45
  526. package/contracts/type/Seconds.sol +23 -0
  527. package/contracts/type/Selector.sol +5 -0
  528. package/contracts/type/String.sol +42 -0
  529. package/contracts/type/Timestamp.sol +14 -8
  530. package/contracts/type/UFixed.sol +35 -127
  531. package/contracts/type/Version.sol +54 -5
  532. package/contracts/upgradeability/IVersionable.sol +3 -0
  533. package/contracts/upgradeability/ProxyManager.sol +27 -13
  534. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
  535. package/contracts/upgradeability/Versionable.sol +6 -3
  536. package/package.json +4 -4
  537. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
  538. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
  539. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  540. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  541. package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.dbg.json +0 -4
  542. package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.json +0 -206
  543. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  544. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -474
  545. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  546. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  547. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
  548. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  549. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  550. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  551. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
  552. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  553. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  554. package/contracts/authorization/ReleaseAccessManager.sol +0 -38
  555. package/contracts/instance/module/IAccess.sol +0 -46
  556. package/contracts/shared/ComponentServiceHelperLib.sol +0 -118
  557. package/contracts/shared/ComponentVerifyingService.sol +0 -126
  558. package/contracts/shared/IKeyValueStore.sol +0 -54
  559. package/contracts/shared/KeyValueStore.sol +0 -131
  560. 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,85 +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()
104
+ returns (Amount premiumAmount)
115
105
  {
116
- _checkNftType(applicationNftId, POLICY());
117
-
118
- // check caller is registered product
119
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
120
- InstanceReader instanceReader = instance.getInstanceReader();
106
+ // checks
107
+ (
108
+ IInstance instance,
109
+ NftId productNftId,
110
+ IPolicy.PolicyInfo memory applicationInfo
111
+ ) = _getAndVerifyCallerForPolicy(applicationNftId);
121
112
 
122
113
  // check policy is in state applied
114
+ InstanceReader instanceReader = instance.getInstanceReader();
123
115
  if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
124
116
  revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
125
117
  }
126
118
 
127
- // check policy matches with calling product
128
- IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
129
- if(applicationInfo.productNftId != productNftId) {
130
- revert ErrorPolicyServicePolicyProductMismatch(
131
- applicationNftId,
132
- applicationInfo.productNftId,
133
- productNftId);
134
- }
135
-
119
+ // effects
136
120
  // actual collateralizaion
137
121
  _poolService.lockCollateral(
138
122
  instance,
139
- address(instanceReader.getComponentInfo(productNftId).token),
123
+ address(instanceReader.getToken(productNftId)),
140
124
  productNftId,
141
125
  applicationNftId,
142
126
  applicationInfo.bundleNftId,
143
127
  applicationInfo.sumInsuredAmount);
144
128
 
145
129
  // optional activation of policy
146
- if(activateAt > zeroTimestamp()) {
147
- applicationInfo = _activate(
148
- applicationNftId,
149
- applicationInfo,
150
- activateAt);
130
+ if(activateAt.gtz()) {
131
+ applicationInfo = PolicyServiceLib.activate(applicationNftId, applicationInfo, activateAt);
151
132
  }
152
133
 
153
134
  // update policy and set state to collateralized
154
- instance.getInstanceStore().updatePolicy(
135
+ instance.getProductStore().updatePolicy(
155
136
  applicationNftId,
156
137
  applicationInfo,
157
138
  COLLATERALIZED());
158
139
 
159
140
  // calculate and store premium
141
+ RiskId riskId = applicationInfo.riskId;
142
+ NftId bundleNftId = applicationInfo.bundleNftId;
143
+
160
144
  IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
161
145
  productNftId,
162
- applicationInfo.riskId,
146
+ riskId,
163
147
  applicationInfo.sumInsuredAmount,
164
148
  applicationInfo.lifetime,
165
149
  applicationInfo.applicationData,
166
- applicationInfo.bundleNftId,
150
+ bundleNftId,
167
151
  applicationInfo.referralId);
168
152
 
169
- 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(
170
162
  applicationNftId,
171
163
  premium);
172
164
 
173
- // update referral counter
165
+ // update referral counter if product has linked distributino component
174
166
  {
175
167
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
176
-
177
- if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
168
+ if (productInfo.hasDistribution) {
178
169
  _distributionService.processReferral(
179
170
  productInfo.distributionNftId,
180
171
  applicationInfo.referralId);
181
172
  }
182
173
  }
183
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
+
184
180
  // log policy creation before interactions with token and policy holder
185
181
  emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
186
182
 
187
- // TODO add calling pool contract if it needs to validate application
188
-
183
+ // interactions
189
184
  // callback to policy holder if applicable
190
185
  _policyHolderPolicyActivated(applicationNftId, activateAt);
191
186
  }
@@ -198,72 +193,132 @@ contract PolicyService is
198
193
  )
199
194
  external
200
195
  virtual
196
+ restricted()
201
197
  nonReentrant()
202
198
  {
203
- _checkNftType(policyNftId, POLICY());
199
+ // checks
200
+ (
201
+ IInstance instance,
202
+ NftId productNftId,
203
+ IPolicy.PolicyInfo memory policyInfo
204
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
204
205
 
205
- // check caller is registered product
206
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
206
+ // check policy is in state collateralized
207
207
  InstanceReader instanceReader = instance.getInstanceReader();
208
- StateId stateId = instanceReader.getPolicyState(policyNftId);
209
-
210
- // check policy is in state collateralized or active
211
- if (!(stateId == COLLATERALIZED())) {
208
+ if (instanceReader.getPolicyState(policyNftId) != COLLATERALIZED()) {
212
209
  revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
213
210
  }
214
211
 
215
- // check if premium is already collected
216
- if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
212
+ // check if premium has already been collected
213
+ if (instanceReader.getPremiumState(policyNftId) == PAID()) {
217
214
  revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
218
215
  }
219
216
 
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,
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,
227
239
  premium);
228
240
 
229
241
  // optionally activate policy
230
242
  if(activateAt.gtz()) {
231
- policyInfo = _activate(policyNftId, policyInfo, activateAt);
243
+ policyInfo = PolicyServiceLib.activate(policyNftId, policyInfo, activateAt);
232
244
  }
233
245
 
234
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
235
- instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
246
+ instance.getProductStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
247
+ instance.getProductStore().updatePremiumState(policyNftId, PAID());
236
248
 
237
249
  // log premium collection before interactions with token
238
250
  emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
239
251
 
240
- _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
252
+ // interactions
253
+ _transferPremiumAmounts(instanceReader, policyNftId, policyInfo.productNftId, premium);
241
254
  }
242
255
 
256
+
243
257
  /// @inheritdoc IPolicyService
244
258
  function activate(NftId policyNftId, Timestamp activateAt)
245
259
  external
246
260
  virtual
261
+ restricted()
247
262
  nonReentrant()
248
263
  {
249
- _checkNftType(policyNftId, POLICY());
250
-
251
- // check caller is registered product
252
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
253
- InstanceReader instanceReader = instance.getInstanceReader();
254
-
255
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
256
- policyInfo = _activate(policyNftId, policyInfo, activateAt);
264
+ // checks
265
+ (
266
+ IInstance instance,,
267
+ IPolicy.PolicyInfo memory policyInfo
268
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
257
269
 
258
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
270
+ // effects
271
+ policyInfo = PolicyServiceLib.activate(policyNftId, policyInfo, activateAt);
272
+ instance.getProductStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
259
273
 
260
274
  // log policy activation before interactions with policy holder
261
275
  emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
262
276
 
277
+ // interactions
263
278
  // callback to policy holder if applicable
264
279
  _policyHolderPolicyActivated(policyNftId, activateAt);
265
280
  }
266
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
+
267
322
 
268
323
  /// @inheritdoc IPolicyService
269
324
  function expire(
@@ -272,29 +327,26 @@ contract PolicyService is
272
327
  )
273
328
  external
274
329
  virtual
330
+ restricted()
275
331
  nonReentrant()
276
332
  returns (Timestamp expiredAt)
277
333
  {
278
- _checkNftType(policyNftId, POLICY());
279
-
280
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
281
-
282
- // check policy matches with calling product
283
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
284
- if(policyInfo.productNftId != productNftId) {
285
- revert ErrorPolicyServicePolicyProductMismatch(
286
- policyNftId,
287
- policyInfo.productNftId,
288
- productNftId);
289
- }
334
+ // checks
335
+ (
336
+ IInstance instance,,
337
+ IPolicy.PolicyInfo memory policyInfo
338
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
290
339
 
340
+ // more checks, effects + interactions
291
341
  return _expire(
292
342
  instance,
293
343
  policyNftId,
344
+ policyInfo,
294
345
  expireAt
295
346
  );
296
347
  }
297
348
 
349
+
298
350
  /// @inheritdoc IPolicyService
299
351
  function expirePolicy(
300
352
  IInstance instance,
@@ -303,176 +355,104 @@ contract PolicyService is
303
355
  )
304
356
  external
305
357
  virtual
358
+ restricted()
306
359
  nonReentrant()
307
360
  returns (Timestamp expiredAt)
308
361
  {
362
+ // checks
309
363
  _checkNftType(policyNftId, POLICY());
364
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(
365
+ policyNftId);
310
366
 
367
+ // more checks, effects + interactions
311
368
  return _expire(
312
369
  instance,
313
370
  policyNftId,
371
+ policyInfo,
314
372
  expireAt
315
373
  );
316
374
  }
317
375
 
318
- function _expire(
319
- IInstance instance,
320
- NftId policyNftId,
321
- Timestamp expireAt
322
- )
323
- internal
324
- returns (Timestamp expiredAt)
325
- {
326
- InstanceReader instanceReader = instance.getInstanceReader();
327
-
328
- // check policy is active
329
- StateId policyState = instanceReader.getPolicyState(policyNftId);
330
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
331
- if (!_policyHasBeenActivated(policyState, policyInfo)) {
332
- revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
333
- }
334
-
335
- // set return value to provided timestamp
336
- expiredAt = expireAt;
337
-
338
- // update expiredAt to current block timestamp if not set
339
- if (expiredAt.eqz()) {
340
- expiredAt = TimestampLib.blockTimestamp();
341
- }
342
-
343
- // check expiredAt represents a valid expiry time
344
- if (expiredAt >= policyInfo.expiredAt) {
345
- revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
346
- }
347
- if (expiredAt < TimestampLib.blockTimestamp()) {
348
- revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
349
- }
350
-
351
- // update policyInfo with new expiredAt timestamp
352
- Timestamp originalExpiredAt = policyInfo.expiredAt;
353
- policyInfo.expiredAt = expiredAt;
354
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
355
-
356
- emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
357
-
358
- // callback to policy holder if applicable
359
- _policyHolderPolicyExpired(policyNftId, expiredAt);
360
- }
361
-
362
376
 
377
+ /// @inheritdoc IPolicyService
363
378
  function close(
364
379
  NftId policyNftId
365
380
  )
366
381
  external
367
382
  virtual
383
+ restricted()
368
384
  nonReentrant()
369
385
  {
370
- _checkNftType(policyNftId, POLICY());
371
-
372
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
386
+ // checks
387
+ (
388
+ IInstance instance,
389
+ NftId productNftId,
390
+ IPolicy.PolicyInfo memory policyInfo
391
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
373
392
  InstanceReader instanceReader = instance.getInstanceReader();
374
393
 
375
- // check that policy has been activated
376
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
377
- StateId policyState = instanceReader.getPolicyState(policyNftId);
378
- if (!_policyHasBeenActivated(policyState, policyInfo)) {
379
- revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
380
- }
381
-
382
- // check that policy has not already been closed
383
- if (policyInfo.closedAt.gtz()) {
384
- revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
394
+ // check policy is in a closeable state
395
+ if (!PolicyServiceLib.policyIsCloseable(instanceReader, policyNftId)) {
396
+ revert ErrorPolicyServicePolicyNotCloseable(policyNftId);
385
397
  }
386
398
 
387
- // check that policy does not have any open claims
388
- if (policyInfo.openClaimsCount > 0) {
389
- revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
390
- }
399
+ // check that policy has been activated
400
+ RiskId riskId = policyInfo.riskId;
401
+ NftId bundleNftId = policyInfo.bundleNftId;
391
402
 
392
- // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
393
- // TODO consider to remove requirement for fully paid premiums altogether
394
- if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
403
+ if (instanceReader.getPremiumState(policyNftId) != PAID()) {
395
404
  revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
396
405
  }
397
406
 
407
+ // effects
398
408
  // release (remaining) collateral that was blocked by policy
399
409
  _poolService.releaseCollateral(
400
410
  instance,
401
- address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
402
411
  policyNftId,
403
412
  policyInfo);
404
413
 
405
414
  // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
406
415
 
407
416
  // update policy state to closed
408
- policyInfo.closedAt = TimestampLib.blockTimestamp();
409
- 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);
410
424
 
411
425
  emit LogPolicyServicePolicyClosed(policyNftId);
412
426
  }
413
427
 
414
428
 
415
- /// @dev calculates the premium and updates all counters in the other services
416
- function _processPremium(
429
+ /// @dev shared functionality for expire() and policyExpire().
430
+ function _expire(
417
431
  IInstance instance,
418
- NftId applicationNftId,
419
- IPolicy.PolicyInfo memory applicationInfo,
420
- IPolicy.PremiumInfo memory premium
421
- )
422
- internal
423
- virtual
424
- {
425
- NftId productNftId = applicationInfo.productNftId;
426
- InstanceReader instanceReader = instance.getInstanceReader();
427
-
428
- // check if premium balance and allowance of policy holder is sufficient
429
- {
430
- TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
431
- address policyHolder = getRegistry().ownerOf(applicationNftId);
432
-
433
- _checkPremiumBalanceAndAllowance(
434
- tokenHandler.getToken(),
435
- address(tokenHandler),
436
- policyHolder,
437
- premium.premiumAmount);
438
- }
439
-
440
- // update the counters
441
- _processSale(
442
- instanceReader,
443
- instance.getInstanceStore(),
444
- productNftId,
445
- applicationInfo.bundleNftId,
446
- applicationInfo.referralId,
447
- premium);
448
- }
449
-
450
- function _activate(
451
- NftId policyNftId,
432
+ NftId policyNftId,
452
433
  IPolicy.PolicyInfo memory policyInfo,
453
- Timestamp activateAt
434
+ Timestamp expireAt
454
435
  )
455
436
  internal
456
- virtual
457
- view
458
- returns (IPolicy.PolicyInfo memory)
437
+ returns (Timestamp)
459
438
  {
460
- // fail if policy has already been activated and activateAt is different
461
- if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
462
- revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
463
- }
439
+ policyInfo = PolicyServiceLib.expire(
440
+ instance.getInstanceReader(),
441
+ policyNftId,
442
+ policyInfo,
443
+ expireAt);
464
444
 
465
- // ignore if policy has already been activated and activateAt is the same
466
- if (policyInfo.activatedAt == activateAt) {
467
- return policyInfo;
468
- }
445
+ instance.getProductStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
469
446
 
470
- policyInfo.activatedAt = activateAt;
471
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
447
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, policyInfo.expiredAt);
472
448
 
473
- return policyInfo;
449
+ // interactions
450
+ // callback to policy holder if applicable
451
+ _policyHolderPolicyExpired(policyNftId, policyInfo.expiredAt);
452
+ return policyInfo.expiredAt;
474
453
  }
475
454
 
455
+
476
456
  /// @dev update counters by calling the involved services
477
457
  function _processSale(
478
458
  InstanceReader instanceReader,
@@ -485,12 +465,12 @@ contract PolicyService is
485
465
  internal
486
466
  virtual
487
467
  {
488
- (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
468
+ (NftId distributionNftId,,,) = _getDistributionNftAndWallets(
489
469
  instanceReader,
490
470
  productNftId);
491
471
 
492
472
  // update product fees, distribution and pool fees
493
- _componentService.increaseProductFees(
473
+ _accountingService.increaseProductFees(
494
474
  instanceStore,
495
475
  productNftId,
496
476
  premium.productFeeVarAmount + premium.productFeeFixAmount);
@@ -511,7 +491,7 @@ contract PolicyService is
511
491
 
512
492
 
513
493
  /// @dev transfer the premium to the wallets the premium is distributed to
514
- function _transferFunds(
494
+ function _transferPremiumAmounts(
515
495
  InstanceReader instanceReader,
516
496
  NftId policyNftId,
517
497
  NftId productNftId,
@@ -520,7 +500,6 @@ contract PolicyService is
520
500
  internal
521
501
  virtual
522
502
  {
523
- TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
524
503
  address policyHolder = getRegistry().ownerOf(policyNftId);
525
504
 
526
505
  (
@@ -532,58 +511,20 @@ contract PolicyService is
532
511
  instanceReader,
533
512
  productNftId);
534
513
 
535
- tokenHandler.collectTokensToThreeRecipients(
536
- policyHolder,
537
- productWallet,
538
- premium.productFeeAmount,
539
- distributionWallet,
540
- premium.distributionFeeAndCommissionAmount,
541
- poolWallet,
542
- premium.poolPremiumAndFeeAmount);
543
- }
544
-
514
+ // step 1: collect premium amount from policy holder
515
+ TokenHandler tokenHandler = instanceReader.getTokenHandler(productNftId);
516
+ tokenHandler.pullToken(policyHolder, premium.premiumAmount);
545
517
 
546
- /// @dev checks that policy has been collateralized and has been activated.
547
- /// does not check if policy has been expired or closed.
548
- function _policyHasBeenActivated(
549
- StateId policyState,
550
- IPolicy.PolicyInfo memory policyInfo
551
- )
552
- internal
553
- view
554
- returns (bool)
555
- {
556
- if (policyState != COLLATERALIZED()) { return false; }
557
- if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
558
- return true;
559
- }
560
-
561
-
562
- /// @dev checks the balance and allowance of the policy holder
563
- function _checkPremiumBalanceAndAllowance(
564
- IERC20Metadata token,
565
- address tokenHandlerAddress,
566
- address policyHolder,
567
- Amount premiumAmount
568
- )
569
- internal
570
- virtual
571
- view
572
- {
573
- uint256 premium = premiumAmount.toInt();
574
- uint256 balance = token.balanceOf(policyHolder);
575
- uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
576
-
577
- if (balance < premium) {
578
- revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
518
+ // step 2: push distribution fee to distribution wallet
519
+ if (premium.distributionFeeAndCommissionAmount.gtz()) {
520
+ tokenHandler.pushToken(distributionWallet, premium.distributionFeeAndCommissionAmount);
579
521
  }
580
522
 
581
- if (allowance < premium) {
582
- 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);
583
526
  }
584
527
  }
585
-
586
-
587
528
  function _policyHolderPolicyActivated(
588
529
  NftId policyNftId,
589
530
  Timestamp activateAt
@@ -642,21 +583,6 @@ contract PolicyService is
642
583
  }
643
584
 
644
585
 
645
- function _getTokenHandler(
646
- InstanceReader instanceReader,
647
- NftId productNftId
648
- )
649
- internal
650
- virtual
651
- view
652
- returns (
653
- TokenHandler tokenHandler
654
- )
655
- {
656
- tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
657
- }
658
-
659
-
660
586
  function _getDistributionNftAndWallets(
661
587
  InstanceReader instanceReader,
662
588
  NftId productNftId
@@ -671,17 +597,45 @@ contract PolicyService is
671
597
  )
672
598
  {
673
599
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
674
- distributionNftId = productInfo.distributionNftId;
675
- distributionWallet = instanceReader.getComponentInfo(distributionNftId).wallet;
676
- poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).wallet;
677
- productWallet = instanceReader.getComponentInfo(productNftId).wallet;
600
+ productWallet = instanceReader.getComponentInfo(productNftId).tokenHandler.getWallet();
601
+ poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).tokenHandler.getWallet();
602
+
603
+ if (productInfo.hasDistribution) {
604
+ distributionNftId = productInfo.distributionNftId;
605
+ distributionWallet = instanceReader.getComponentInfo(distributionNftId).tokenHandler.getWallet();
606
+ }
678
607
  }
679
608
 
680
609
 
681
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
682
- IRegistry.ObjectInfo memory productInfo;
683
- (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
684
- 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
+ }
685
639
  }
686
640
 
687
641