@etherisc/gif-next 0.0.2-f619be3-760 → 0.0.2-f62dcdf-553

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