@etherisc/gif-next 0.0.2-ec436bf-674 → 0.0.2-ec4918f-024

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 (699) hide show
  1. package/README.md +121 -18
  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/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  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/{instance/IAccessManagerSimple.sol/IAccessManagerSimple.json → authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json} +125 -11
  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 +1519 -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 +1573 -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 +474 -553
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +391 -169
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +357 -3059
  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 +1 -1
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1048 -378
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +491 -387
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +344 -114
  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/{AccessManagedSimple.sol/AccessManagedSimple.json → base/Cloneable.sol/Cloneable.json} +38 -2
  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 +1 -1
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +30 -112
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{ITreasury.sol/ITreasury.json → IComponents.sol/IComponents.json} +2 -2
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  91. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  92. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  93. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  94. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  95. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1039 -0
  96. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  97. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +478 -0
  98. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  99. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  100. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  101. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → oracle/IOracleComponent.sol/IOracleComponent.json} +405 -368
  102. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  103. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +709 -0
  104. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  105. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +907 -0
  106. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  107. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +966 -0
  108. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +722 -0
  110. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  111. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1280 -0
  112. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  113. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +470 -0
  114. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  115. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1465 -0
  116. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  117. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +834 -0
  118. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  119. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +960 -0
  120. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  121. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +960 -0
  122. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1283 -0
  124. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  125. package/artifacts/contracts/pool/Pool.sol/Pool.json +1079 -0
  126. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  127. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1625 -0
  128. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  129. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +766 -0
  130. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  131. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +771 -0
  132. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +710 -0
  134. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  135. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1173 -0
  136. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  137. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +470 -0
  138. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  139. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1431 -0
  140. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  141. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +838 -0
  142. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  143. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → product/IApplicationService.sol/IApplicationService.json} +231 -225
  144. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  145. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +942 -0
  146. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  147. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +925 -0
  148. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  149. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +283 -266
  150. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  151. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +1012 -0
  152. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  153. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → product/IRiskService.sol/IRiskService.json} +149 -162
  154. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  155. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1302 -0
  156. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  157. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +782 -0
  158. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  159. package/artifacts/contracts/product/PricingService.sol/PricingService.json +907 -0
  160. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  161. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +762 -0
  162. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  163. package/artifacts/contracts/product/Product.sol/Product.json +1131 -0
  164. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  165. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  166. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  167. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  168. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  169. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +72 -16
  170. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +595 -186
  172. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  173. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +371 -205
  174. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  175. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -0
  176. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  177. package/artifacts/contracts/registry/Registry.sol/Registry.json +921 -213
  178. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  179. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1886 -0
  180. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  181. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +339 -330
  182. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  183. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +326 -138
  184. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  185. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  186. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  187. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  188. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  189. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  190. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  191. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +351 -100
  192. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  193. package/artifacts/contracts/shared/Component.sol/Component.json +725 -0
  194. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  195. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1768 -0
  196. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  197. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +814 -0
  198. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  199. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/ComponentVerifyingService.sol/ComponentVerifyingService.json} +209 -201
  200. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  201. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  202. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  203. package/artifacts/contracts/{instance/service/IDistributionService.sol/IDistributionService.json → shared/IComponent.sol/IComponent.json} +351 -165
  204. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  205. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1335 -0
  206. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  207. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +723 -0
  208. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  209. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +95 -14
  210. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  211. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  212. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  213. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +46 -26
  214. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  215. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +175 -0
  216. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  217. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +40 -31
  218. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  219. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  220. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  221. package/artifacts/contracts/shared/IService.sol/IService.json +119 -165
  222. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  223. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  224. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  225. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +829 -0
  226. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  227. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  228. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  229. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  230. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  231. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  232. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +81 -30
  234. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  235. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +198 -0
  236. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  237. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +96 -48
  238. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  239. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +58 -0
  240. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  241. package/artifacts/contracts/shared/Service.sol/Service.json +150 -176
  242. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  243. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +382 -9
  244. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  245. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  246. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  247. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1465 -0
  248. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  249. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1043 -0
  250. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  251. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  252. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  253. package/artifacts/contracts/staking/Staking.sol/Staking.json +1888 -0
  254. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  255. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  256. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  257. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +776 -0
  258. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  259. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  260. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  261. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1249 -0
  262. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +710 -0
  264. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  265. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2283 -0
  266. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  267. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  268. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  269. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  270. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  271. package/artifacts/contracts/type/Amount.sol/AmountLib.json +398 -0
  272. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  273. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +225 -0
  274. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  275. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +203 -0
  276. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  277. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  278. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  279. package/artifacts/contracts/type/Fee.sol/FeeLib.json +317 -0
  280. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  281. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  282. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  283. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +209 -0
  284. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  285. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  286. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  287. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +239 -0
  288. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  289. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  290. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  291. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  292. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  293. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  294. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  295. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +142 -0
  296. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  297. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +369 -0
  298. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +246 -0
  300. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  302. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  304. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +105 -0
  306. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  307. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  308. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  309. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  310. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/UFixed.sol/MathLib.json +16 -0
  312. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +548 -0
  314. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  315. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  316. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +68 -0
  318. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  319. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +55 -0
  320. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  321. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
  322. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  323. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  324. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  325. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +78 -0
  326. package/contracts/authorization/AccessAdmin.sol +596 -0
  327. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  328. package/contracts/authorization/Authorization.sol +289 -0
  329. package/contracts/authorization/IAccess.sol +49 -0
  330. package/contracts/authorization/IAccessAdmin.sol +137 -0
  331. package/contracts/authorization/IAuthorization.sol +60 -0
  332. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  333. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  334. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  335. package/contracts/distribution/BasicDistribution.sol +139 -0
  336. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  337. package/contracts/distribution/Distribution.sol +285 -0
  338. package/contracts/distribution/DistributionService.sol +355 -0
  339. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  340. package/contracts/distribution/IDistributionComponent.sol +52 -0
  341. package/contracts/distribution/IDistributionService.sol +101 -0
  342. package/contracts/examples/fire/DamageLevel.sol +59 -0
  343. package/contracts/examples/fire/FirePool.sol +73 -0
  344. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  345. package/contracts/examples/fire/FireProduct.sol +415 -0
  346. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  347. package/contracts/examples/fire/FireUSD.sol +26 -0
  348. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  349. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  350. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  351. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  352. package/contracts/instance/BundleSet.sol +126 -0
  353. package/contracts/instance/IInstance.sol +51 -24
  354. package/contracts/instance/IInstanceService.sol +58 -17
  355. package/contracts/instance/Instance.sol +164 -375
  356. package/contracts/instance/InstanceAdmin.sol +277 -0
  357. package/contracts/instance/InstanceAuthorizationV3.sol +194 -0
  358. package/contracts/instance/InstanceReader.sol +271 -82
  359. package/contracts/instance/InstanceService.sol +356 -124
  360. package/contracts/instance/InstanceServiceManager.sol +14 -31
  361. package/contracts/instance/InstanceStore.sol +287 -0
  362. package/contracts/instance/base/BalanceStore.sol +123 -0
  363. package/contracts/instance/base/Cloneable.sol +28 -0
  364. package/contracts/instance/base/ObjectCounter.sol +21 -0
  365. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  366. package/contracts/instance/base/ObjectSet.sol +79 -0
  367. package/contracts/instance/module/IAccess.sol +29 -21
  368. package/contracts/instance/module/IBundle.sol +8 -8
  369. package/contracts/instance/module/IComponents.sol +51 -0
  370. package/contracts/instance/module/IDistribution.sol +6 -4
  371. package/contracts/instance/module/IPolicy.sol +58 -19
  372. package/contracts/instance/module/IRisk.sol +1 -1
  373. package/contracts/{test/Usdc.sol → mock/Dip.sol} +6 -6
  374. package/contracts/oracle/BasicOracle.sol +47 -0
  375. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  376. package/contracts/oracle/IOracle.sol +36 -0
  377. package/contracts/oracle/IOracleComponent.sol +33 -0
  378. package/contracts/oracle/IOracleService.sol +66 -0
  379. package/contracts/oracle/Oracle.sol +156 -0
  380. package/contracts/oracle/OracleService.sol +291 -0
  381. package/contracts/oracle/OracleServiceManager.sol +39 -0
  382. package/contracts/pool/BasicPool.sol +154 -0
  383. package/contracts/pool/BasicPoolAuthorization.sol +57 -0
  384. package/contracts/pool/BundleService.sol +493 -0
  385. package/contracts/pool/BundleServiceManager.sol +39 -0
  386. package/contracts/pool/IBundleService.sol +143 -0
  387. package/contracts/pool/IPoolComponent.sol +68 -0
  388. package/contracts/pool/IPoolService.sol +167 -0
  389. package/contracts/pool/Pool.sol +330 -0
  390. package/contracts/pool/PoolService.sol +544 -0
  391. package/contracts/pool/PoolServiceManager.sol +39 -0
  392. package/contracts/product/ApplicationService.sol +259 -0
  393. package/contracts/product/ApplicationServiceManager.sol +38 -0
  394. package/contracts/product/BasicProduct.sol +53 -0
  395. package/contracts/product/BasicProductAuthorization.sol +42 -0
  396. package/contracts/product/ClaimService.sol +612 -0
  397. package/contracts/product/ClaimServiceManager.sol +38 -0
  398. package/contracts/product/IApplicationService.sol +63 -0
  399. package/contracts/product/IClaimService.sol +123 -0
  400. package/contracts/product/IPolicyService.sol +80 -0
  401. package/contracts/product/IPricingService.sol +39 -0
  402. package/contracts/product/IProductComponent.sol +59 -0
  403. package/contracts/product/IRiskService.sol +33 -0
  404. package/contracts/product/PolicyService.sol +691 -0
  405. package/contracts/product/PolicyServiceManager.sol +39 -0
  406. package/contracts/product/PricingService.sol +300 -0
  407. package/contracts/product/PricingServiceManager.sol +39 -0
  408. package/contracts/product/Product.sol +455 -0
  409. package/contracts/product/RiskService.sol +96 -0
  410. package/contracts/product/RiskServiceManager.sol +39 -0
  411. package/contracts/registry/ChainNft.sol +78 -33
  412. package/contracts/registry/IRegistry.sol +125 -48
  413. package/contracts/registry/IRegistryService.sol +45 -16
  414. package/contracts/registry/ITransferInterceptor.sol +1 -1
  415. package/contracts/registry/Registry.sol +532 -304
  416. package/contracts/registry/RegistryAdmin.sol +448 -0
  417. package/contracts/registry/RegistryService.sol +126 -284
  418. package/contracts/registry/RegistryServiceManager.sol +26 -53
  419. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  420. package/contracts/registry/ReleaseRegistry.sol +501 -0
  421. package/contracts/registry/ServiceAuthorizationV3.sol +194 -0
  422. package/contracts/registry/TokenRegistry.sol +261 -57
  423. package/contracts/shared/Component.sol +265 -0
  424. package/contracts/shared/ComponentService.sol +745 -0
  425. package/contracts/shared/ComponentServiceManager.sol +38 -0
  426. package/contracts/shared/ComponentVerifyingService.sol +126 -0
  427. package/contracts/shared/ContractLib.sol +38 -0
  428. package/contracts/shared/IComponent.sol +74 -0
  429. package/contracts/shared/IComponentService.sol +120 -0
  430. package/contracts/shared/IInstanceLinkedComponent.sol +41 -0
  431. package/contracts/{instance/base → shared}/IKeyValueStore.sol +16 -11
  432. package/contracts/{instance/base → shared}/ILifecycle.sol +5 -4
  433. package/contracts/shared/INftOwnable.sol +15 -12
  434. package/contracts/shared/IPolicyHolder.sol +35 -0
  435. package/contracts/shared/IRegisterable.sol +15 -6
  436. package/contracts/shared/IRegistryLinked.sol +11 -0
  437. package/contracts/shared/IService.sol +16 -6
  438. package/contracts/shared/InitializableERC165.sol +27 -0
  439. package/contracts/shared/InstanceLinkedComponent.sol +213 -0
  440. package/contracts/shared/KeyValueStore.sol +131 -0
  441. package/contracts/shared/Lifecycle.sol +88 -0
  442. package/contracts/shared/NftIdSet.sol +65 -0
  443. package/contracts/shared/NftOwnable.sol +75 -84
  444. package/contracts/shared/PolicyHolder.sol +62 -0
  445. package/contracts/shared/Registerable.sol +34 -39
  446. package/contracts/shared/RegistryLinked.sol +44 -0
  447. package/contracts/shared/Service.sol +61 -32
  448. package/contracts/shared/TokenHandler.sol +122 -10
  449. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  450. package/contracts/staking/IStaking.sol +168 -0
  451. package/contracts/staking/IStakingService.sol +157 -0
  452. package/contracts/staking/StakeManagerLib.sol +224 -0
  453. package/contracts/staking/Staking.sol +497 -0
  454. package/contracts/staking/StakingLifecycle.sol +23 -0
  455. package/contracts/staking/StakingManager.sol +52 -0
  456. package/contracts/staking/StakingReader.sol +190 -0
  457. package/contracts/staking/StakingService.sol +407 -0
  458. package/contracts/staking/StakingServiceManager.sol +44 -0
  459. package/contracts/staking/StakingStore.sol +605 -0
  460. package/contracts/staking/TargetManagerLib.sol +211 -0
  461. package/contracts/{types → type}/AddressSet.sol +1 -1
  462. package/contracts/type/Amount.sol +150 -0
  463. package/contracts/{types → type}/Blocknumber.sol +27 -3
  464. package/contracts/type/ClaimId.sol +80 -0
  465. package/contracts/{types → type}/DistributorType.sol +2 -2
  466. package/contracts/{types → type}/Fee.sol +33 -23
  467. package/contracts/{types → type}/NftId.sol +22 -15
  468. package/contracts/type/NftIdSet.sol +62 -0
  469. package/contracts/type/ObjectType.sol +276 -0
  470. package/contracts/type/PayoutId.sol +82 -0
  471. package/contracts/{types → type}/Referral.sol +6 -1
  472. package/contracts/type/RequestId.sol +75 -0
  473. package/contracts/{types → type}/RiskId.sol +16 -2
  474. package/contracts/type/RoleId.sol +162 -0
  475. package/contracts/type/Seconds.sol +101 -0
  476. package/contracts/type/Selector.sol +102 -0
  477. package/contracts/{types → type}/StateId.sol +48 -4
  478. package/contracts/type/String.sol +53 -0
  479. package/contracts/{types → type}/Timestamp.sol +34 -15
  480. package/contracts/{types → type}/UFixed.sol +39 -9
  481. package/contracts/{types → type}/Version.sol +5 -2
  482. package/contracts/{shared → upgradeability}/IVersionable.sol +5 -48
  483. package/contracts/upgradeability/ProxyManager.sol +232 -0
  484. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  485. package/contracts/upgradeability/Versionable.sol +59 -0
  486. package/package.json +11 -7
  487. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  488. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  489. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  490. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -618
  491. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  492. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  493. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  494. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  495. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  496. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -249
  497. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  498. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  499. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  500. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -782
  501. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  502. package/artifacts/contracts/components/Product.sol/Product.json +0 -775
  503. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  504. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  505. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  506. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  507. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  508. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  509. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  510. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  511. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  512. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  513. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  514. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  515. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  516. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  517. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  518. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  519. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  520. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  521. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  522. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  523. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  524. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  525. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  526. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  527. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  528. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  529. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  530. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  531. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  532. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  533. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  534. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  535. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  536. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  537. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  538. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  539. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  540. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  541. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  542. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  543. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  544. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  545. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  546. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  547. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -917
  548. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  549. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  550. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  551. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  552. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  553. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  554. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -502
  555. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  556. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  557. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  558. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  559. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  560. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  561. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  562. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -716
  563. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  564. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -448
  565. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  566. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  567. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  568. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  569. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  570. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -855
  571. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  572. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -460
  573. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  574. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  575. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  576. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -35
  577. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  578. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -205
  579. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  580. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -349
  581. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  582. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  583. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  584. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  585. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -228
  586. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  587. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  588. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  589. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  590. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  591. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  592. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  593. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  594. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  595. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  596. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  597. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  598. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  599. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  600. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  601. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  602. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  603. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +0 -10
  604. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  605. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  606. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  607. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  608. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  609. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +0 -104
  610. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  611. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  612. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  613. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +0 -125
  614. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  615. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  616. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  617. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
  618. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  619. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  620. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  621. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  622. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  623. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  624. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  625. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +0 -86
  626. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  627. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +0 -156
  628. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  629. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +0 -92
  630. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  631. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -249
  632. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  633. package/artifacts/contracts/types/UFixed.sol/MathLib.json +0 -10
  634. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  635. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +0 -479
  636. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  637. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -177
  638. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  639. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -49
  640. package/contracts/components/BaseComponent.sol +0 -91
  641. package/contracts/components/Distribution.sol +0 -160
  642. package/contracts/components/IBaseComponent.sol +0 -25
  643. package/contracts/components/IDistributionComponent.sol +0 -44
  644. package/contracts/components/IPoolComponent.sol +0 -62
  645. package/contracts/components/IProductComponent.sol +0 -35
  646. package/contracts/components/Pool.sol +0 -243
  647. package/contracts/components/Product.sol +0 -297
  648. package/contracts/experiment/cloning/Cloner.sol +0 -47
  649. package/contracts/experiment/errors/Require.sol +0 -38
  650. package/contracts/experiment/errors/Revert.sol +0 -44
  651. package/contracts/experiment/inheritance/A.sol +0 -53
  652. package/contracts/experiment/inheritance/B.sol +0 -28
  653. package/contracts/experiment/inheritance/C.sol +0 -34
  654. package/contracts/experiment/inheritance/IA.sol +0 -13
  655. package/contracts/experiment/inheritance/IB.sol +0 -10
  656. package/contracts/experiment/inheritance/IC.sol +0 -12
  657. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  658. package/contracts/experiment/statemachine/ISM.sol +0 -25
  659. package/contracts/experiment/statemachine/SM.sol +0 -57
  660. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  661. package/contracts/experiment/types/TypeA.sol +0 -47
  662. package/contracts/experiment/types/TypeB.sol +0 -29
  663. package/contracts/instance/AccessManagedSimple.sol +0 -115
  664. package/contracts/instance/AccessManagerSimple.sol +0 -692
  665. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  666. package/contracts/instance/InstanceAccessManager.sol +0 -288
  667. package/contracts/instance/base/ComponentServiceBase.sol +0 -118
  668. package/contracts/instance/base/IInstanceBase.sol +0 -23
  669. package/contracts/instance/base/KeyValueStore.sol +0 -172
  670. package/contracts/instance/base/Lifecycle.sol +0 -100
  671. package/contracts/instance/module/ISetup.sol +0 -44
  672. package/contracts/instance/module/ITreasury.sol +0 -23
  673. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  674. package/contracts/instance/service/DistributionService.sol +0 -87
  675. package/contracts/instance/service/DistributionServiceManager.sol +0 -53
  676. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  677. package/contracts/instance/service/IDistributionService.sol +0 -12
  678. package/contracts/instance/service/IPoolService.sol +0 -37
  679. package/contracts/instance/service/IProductService.sol +0 -107
  680. package/contracts/instance/service/PoolService.sol +0 -193
  681. package/contracts/instance/service/PoolServiceManager.sol +0 -53
  682. package/contracts/shared/ContractDeployerLib.sol +0 -72
  683. package/contracts/shared/ERC165.sol +0 -25
  684. package/contracts/shared/ProxyManager.sol +0 -94
  685. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  686. package/contracts/shared/Versionable.sol +0 -147
  687. package/contracts/test/TestFee.sol +0 -25
  688. package/contracts/test/TestRegisterable.sol +0 -18
  689. package/contracts/test/TestRoleId.sol +0 -14
  690. package/contracts/test/TestService.sol +0 -24
  691. package/contracts/test/TestToken.sol +0 -26
  692. package/contracts/test/TestVersion.sol +0 -44
  693. package/contracts/test/TestVersionable.sol +0 -17
  694. package/contracts/types/ChainId.sol +0 -38
  695. package/contracts/types/NftIdSet.sol +0 -60
  696. package/contracts/types/NumberId.sol +0 -52
  697. package/contracts/types/ObjectType.sol +0 -152
  698. package/contracts/types/RoleId.sol +0 -89
  699. /package/contracts/{types → type}/Key32.sol +0 -0
@@ -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
+ }