@etherisc/gif-next 0.0.2-d2fd9d7-008 → 0.0.2-d30275e-758

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 (397) hide show
  1. package/README.md +28 -14
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +946 -219
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +605 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +806 -243
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +632 -194
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -66
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +303 -1340
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +337 -168
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +439 -3102
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +609 -178
  32. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  34. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +251 -270
  36. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +457 -402
  38. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +292 -131
  40. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2663 -0
  42. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  43. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -27
  44. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +277 -178
  46. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  52. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  54. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +902 -0
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +649 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1326 -0
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +725 -0
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1072 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1022 -223
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +392 -79
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +235 -200
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +714 -0
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +585 -160
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +969 -0
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +536 -304
  90. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IPricingService.sol/IPricingService.json} +248 -172
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +78 -388
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1575 -0
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +741 -0
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +832 -400
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +338 -93
  102. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
  104. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +289 -564
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +289 -124
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +200 -335
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  169. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  194. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  216. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  220. package/contracts/components/Component.sol +253 -0
  221. package/contracts/components/Distribution.sol +204 -83
  222. package/contracts/components/IComponent.sol +76 -0
  223. package/contracts/components/IDistributionComponent.sol +44 -17
  224. package/contracts/components/IPoolComponent.sol +88 -41
  225. package/contracts/components/IProductComponent.sol +10 -5
  226. package/contracts/components/Pool.sol +217 -182
  227. package/contracts/components/Product.sol +248 -163
  228. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  229. package/contracts/instance/BundleManager.sol +17 -20
  230. package/contracts/instance/Cloneable.sol +7 -2
  231. package/contracts/instance/IInstance.sol +57 -33
  232. package/contracts/instance/IInstanceService.sol +56 -9
  233. package/contracts/instance/Instance.sol +150 -367
  234. package/contracts/instance/InstanceAccessManager.sol +430 -177
  235. package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
  236. package/contracts/instance/InstanceReader.sol +44 -39
  237. package/contracts/instance/InstanceService.sol +243 -166
  238. package/contracts/instance/InstanceServiceManager.sol +6 -9
  239. package/contracts/instance/InstanceStore.sol +208 -0
  240. package/contracts/instance/ObjectManager.sol +11 -24
  241. package/contracts/instance/base/ComponentService.sol +148 -0
  242. package/contracts/instance/base/KeyValueStore.sol +13 -5
  243. package/contracts/instance/base/Lifecycle.sol +23 -6
  244. package/contracts/instance/module/IAccess.sol +36 -20
  245. package/contracts/instance/module/IBundle.sol +8 -5
  246. package/contracts/instance/module/IComponents.sol +41 -0
  247. package/contracts/instance/module/IDistribution.sol +2 -0
  248. package/contracts/instance/module/IPolicy.sol +41 -9
  249. package/contracts/instance/module/ISetup.sol +7 -20
  250. package/contracts/instance/service/ApplicationService.sol +185 -0
  251. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  252. package/contracts/instance/service/BundleService.sol +440 -0
  253. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  254. package/contracts/instance/service/ClaimService.sol +239 -0
  255. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  256. package/contracts/instance/service/DistributionService.sol +287 -33
  257. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  258. package/contracts/instance/service/IApplicationService.sol +61 -0
  259. package/contracts/instance/service/IBundleService.sol +102 -0
  260. package/contracts/instance/service/IClaimService.sol +92 -0
  261. package/contracts/instance/service/IDistributionService.sol +74 -1
  262. package/contracts/instance/service/IPolicyService.sol +139 -0
  263. package/contracts/instance/service/IPoolService.sol +76 -25
  264. package/contracts/instance/service/IPricingService.sol +36 -0
  265. package/contracts/instance/service/IProductService.sol +2 -72
  266. package/contracts/instance/service/PolicyService.sol +577 -0
  267. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  268. package/contracts/instance/service/PoolService.sol +232 -183
  269. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  270. package/contracts/instance/service/PricingService.sol +275 -0
  271. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  272. package/contracts/instance/service/ProductService.sol +109 -469
  273. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  274. package/contracts/registry/ChainNft.sol +9 -1
  275. package/contracts/registry/IRegistry.sol +39 -19
  276. package/contracts/registry/IRegistryService.sol +31 -13
  277. package/contracts/registry/ITransferInterceptor.sol +1 -0
  278. package/contracts/registry/Registry.sol +243 -224
  279. package/contracts/registry/RegistryAccessManager.sol +216 -0
  280. package/contracts/registry/RegistryService.sol +101 -173
  281. package/contracts/registry/RegistryServiceManager.sol +21 -39
  282. package/contracts/registry/ReleaseManager.sol +324 -0
  283. package/contracts/registry/TokenRegistry.sol +22 -17
  284. package/contracts/shared/ERC165.sol +14 -12
  285. package/contracts/shared/INftOwnable.sol +11 -10
  286. package/contracts/shared/IPolicyHolder.sol +26 -0
  287. package/contracts/shared/IRegisterable.sol +4 -6
  288. package/contracts/shared/IRegistryLinked.sol +12 -0
  289. package/contracts/shared/IService.sol +5 -4
  290. package/contracts/shared/IVersionable.sol +4 -47
  291. package/contracts/shared/NftOwnable.sol +66 -80
  292. package/contracts/shared/PolicyHolder.sol +81 -0
  293. package/contracts/shared/ProxyManager.sol +100 -25
  294. package/contracts/shared/Registerable.sol +16 -32
  295. package/contracts/shared/RegistryLinked.sol +48 -0
  296. package/contracts/shared/Service.sol +41 -24
  297. package/contracts/shared/TokenHandler.sol +11 -5
  298. package/contracts/shared/Versionable.sol +4 -92
  299. package/contracts/test/TestRegisterable.sol +1 -1
  300. package/contracts/test/TestService.sol +4 -3
  301. package/contracts/types/Amount.sol +70 -0
  302. package/contracts/types/Blocknumber.sol +1 -0
  303. package/contracts/types/ClaimId.sol +75 -0
  304. package/contracts/types/DistributorType.sol +2 -2
  305. package/contracts/types/Fee.sol +13 -5
  306. package/contracts/types/NftId.sol +8 -0
  307. package/contracts/types/ObjectType.sol +16 -7
  308. package/contracts/types/PayoutId.sol +82 -0
  309. package/contracts/types/Referral.sol +4 -0
  310. package/contracts/types/RoleId.sol +26 -19
  311. package/contracts/types/Seconds.sol +54 -0
  312. package/contracts/types/StateId.sol +7 -2
  313. package/contracts/types/Timestamp.sol +18 -13
  314. package/contracts/types/UFixed.sol +1 -0
  315. package/contracts/types/Version.sol +1 -0
  316. package/package.json +3 -3
  317. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  319. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  321. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  323. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  325. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  327. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  329. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  331. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  333. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  335. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  337. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  339. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  341. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  343. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  346. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  348. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  350. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  352. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  354. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  356. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  358. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  360. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  361. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
  362. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  363. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  364. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  365. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  366. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  367. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  368. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  369. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  370. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  371. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  372. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  373. package/contracts/components/BaseComponent.sol +0 -91
  374. package/contracts/components/IBaseComponent.sol +0 -25
  375. package/contracts/experiment/cloning/Cloner.sol +0 -47
  376. package/contracts/experiment/errors/Require.sol +0 -38
  377. package/contracts/experiment/errors/Revert.sol +0 -44
  378. package/contracts/experiment/inheritance/A.sol +0 -53
  379. package/contracts/experiment/inheritance/B.sol +0 -28
  380. package/contracts/experiment/inheritance/C.sol +0 -34
  381. package/contracts/experiment/inheritance/IA.sol +0 -13
  382. package/contracts/experiment/inheritance/IB.sol +0 -10
  383. package/contracts/experiment/inheritance/IC.sol +0 -12
  384. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  385. package/contracts/experiment/statemachine/ISM.sol +0 -25
  386. package/contracts/experiment/statemachine/SM.sol +0 -57
  387. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  388. package/contracts/experiment/types/TypeA.sol +0 -47
  389. package/contracts/experiment/types/TypeB.sol +0 -29
  390. package/contracts/instance/AccessManagedSimple.sol +0 -115
  391. package/contracts/instance/AccessManagerSimple.sol +0 -692
  392. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  393. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  394. package/contracts/instance/base/IInstanceBase.sol +0 -23
  395. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  396. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  397. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -13,9 +13,9 @@ import {UFixed} from "../../types/UFixed.sol";
13
13
  import {Fee} from "../../types/Fee.sol";
14
14
 
15
15
  interface IProductService is IService {
16
-
17
- error ErrorIProductServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
18
16
 
17
+ function register(address productAddress) external returns(NftId);
18
+
19
19
  function setFees(
20
20
  Fee memory productFee,
21
21
  Fee memory processingFee
@@ -37,74 +37,4 @@ interface IProductService is IService {
37
37
  RiskId riskId,
38
38
  StateId newState
39
39
  ) external;
40
-
41
-
42
- function calculatePremium(
43
- RiskId riskId,
44
- uint256 sumInsuredAmount,
45
- uint256 lifetime,
46
- bytes memory applicationData,
47
- NftId bundleNftId,
48
- ReferralId referralId
49
- )
50
- external
51
- view
52
- returns (
53
- uint256 premiumAmount,
54
- uint256 productFeeAmount,
55
- uint256 poolFeeAmount,
56
- uint256 bundleFeeAmount,
57
- uint256 distributionFeeAmount
58
- );
59
-
60
-
61
- function createApplication(
62
- address applicationOwner,
63
- RiskId riskId,
64
- uint256 sumInsuredAmount,
65
- uint256 lifetime,
66
- bytes memory applicationData,
67
- NftId bundleNftId,
68
- ReferralId referralId
69
- ) external returns (NftId nftId);
70
-
71
- /**
72
- * @dev revokes the application represented by {policyNftId}.
73
- * an application can only be revoked in applied state.
74
- * only the application holder may revoke an application.
75
- */
76
- function revoke(NftId policyNftId) external;
77
-
78
- /**
79
- * @dev underwrites the policy represented by {policyNftId}.
80
- * optionally collects premiums and activates the policy.
81
- * - premium payment is only attempted if requirePremiumPayment is set to true
82
- * - activation is only done if activateAt is a non-zero timestamp
83
- */
84
- function underwrite(
85
- NftId policyNftId,
86
- bool requirePremiumPayment,
87
- Timestamp activateAt
88
- ) external;
89
-
90
- // function decline(uint256 nftId) external;
91
- // function expire(uint256 nftId) external;
92
-
93
- function collectPremium(NftId policyNftId, Timestamp activateAt) external;
94
-
95
- function activate(NftId policyNftId, Timestamp activateAt) external;
96
-
97
-
98
- function close(NftId nftId) external;
99
-
100
- // function createClaim(uint256 nftId, uint256 claimAmount) external;
101
- // function confirmClaim(uint256 nftId, uint256 claimId, uint256 claimAmount) external;
102
- // function declineClaim(uint256 nftId, uint256 claimId) external;
103
- // function closeClaim(uint256 nftId, uint256 claimId) external;
104
-
105
- function calculateRequiredCollateral(
106
- UFixed collateralizationLevel,
107
- uint256 sumInsuredAmount
108
- ) external pure returns(uint256 collateralAmount);
109
-
110
40
  }
@@ -0,0 +1,577 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {Product} from "../../components/Product.sol";
6
+ import {IComponents} from "../module/IComponents.sol";
7
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
8
+ import {IInstance} from "../IInstance.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
10
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
+ import {IRisk} from "../module/IRisk.sol";
12
+ import {IBundle} from "../module/IBundle.sol";
13
+ import {ISetup} from "../module/ISetup.sol";
14
+
15
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
16
+
17
+ import {Amount, AmountLib} from "../../types/Amount.sol";
18
+ import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
19
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
20
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
21
+ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../../types/ObjectType.sol";
22
+ import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../../types/StateId.sol";
23
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
24
+ import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
25
+ import {StateId} from "../../types/StateId.sol";
26
+ import {VersionPart} from "../../types/Version.sol";
27
+
28
+ import {ComponentService} from "../base/ComponentService.sol";
29
+ import {IApplicationService} from "./IApplicationService.sol";
30
+ import {IBundleService} from "./IBundleService.sol";
31
+ import {IClaimService} from "./IClaimService.sol";
32
+ import {IDistributionService} from "./IDistributionService.sol";
33
+ import {InstanceReader} from "../InstanceReader.sol";
34
+ import {IPolicyService} from "./IPolicyService.sol";
35
+ import {IPoolService} from "./IPoolService.sol";
36
+ import {IPricingService} from "./IPricingService.sol";
37
+ import {IService} from "../../shared/IService.sol";
38
+ import {Service} from "../../shared/Service.sol";
39
+
40
+ // TODO move some functions into claim service
41
+ contract PolicyService is
42
+ ComponentService,
43
+ IPolicyService
44
+ {
45
+ using NftIdLib for NftId;
46
+ using TimestampLib for Timestamp;
47
+
48
+ IApplicationService internal _applicationService;
49
+ IBundleService internal _bundleService;
50
+ IClaimService internal _claimService;
51
+ IDistributionService internal _distributionService;
52
+ IPoolService internal _poolService;
53
+ IPricingService internal _pricingService;
54
+
55
+ event LogProductServiceSender(address sender);
56
+
57
+ function _initialize(
58
+ address owner,
59
+ bytes memory data
60
+ )
61
+ internal
62
+ virtual override
63
+ initializer
64
+ {
65
+ address registryAddress;
66
+ address initialOwner;
67
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
68
+
69
+ initializeService(registryAddress, address(0), owner);
70
+
71
+ VersionPart majorVersion = getVersion().toMajorPart();
72
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
73
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
74
+ _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
75
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
76
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
77
+ _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
78
+
79
+ registerInterface(type(IPolicyService).interfaceId);
80
+ }
81
+
82
+
83
+ function getDomain() public pure override returns(ObjectType) {
84
+ return POLICY();
85
+ }
86
+
87
+
88
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
89
+ IRegistry.ObjectInfo memory productInfo;
90
+ (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
91
+ product = Product(productInfo.objectAddress);
92
+ }
93
+
94
+
95
+ function decline(
96
+ NftId policyNftId
97
+ )
98
+ external
99
+ override
100
+ {
101
+ revert();
102
+ }
103
+
104
+
105
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
106
+ function collateralize(
107
+ NftId applicationNftId, // = policyNftId
108
+ bool requirePremiumPayment,
109
+ Timestamp activateAt
110
+ )
111
+ external
112
+ virtual override
113
+ {
114
+ // check caller is registered product
115
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
116
+ InstanceReader instanceReader = instance.getInstanceReader();
117
+
118
+ // check policy matches with calling product
119
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
120
+ if(applicationInfo.productNftId != productNftId) {
121
+ revert ErrorPolicyServicePolicyProductMismatch(
122
+ applicationNftId,
123
+ applicationInfo.productNftId,
124
+ productNftId);
125
+ }
126
+
127
+ // check policy is in state applied
128
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
129
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
130
+ }
131
+
132
+ StateId newPolicyState = COLLATERALIZED();
133
+
134
+ // optional activation of policy
135
+ if(activateAt > zeroTimestamp()) {
136
+ newPolicyState = ACTIVE();
137
+ applicationInfo.activatedAt = activateAt;
138
+ applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
139
+ }
140
+
141
+ // lock bundle collateral
142
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
143
+
144
+ // optional collection of premium
145
+ if(requirePremiumPayment) {
146
+ netPremiumAmount = _processPremiumByTreasury(
147
+ instance,
148
+ applicationNftId,
149
+ applicationInfo.premiumAmount);
150
+
151
+ applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
152
+ }
153
+
154
+ // store updated policy info
155
+ instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
156
+
157
+ // lock collateral and update pool and bundle book keeping
158
+ // pool retention level: fraction of sum insured that product will cover from pool funds directly
159
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
160
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
161
+ // might also call pool component (for isVerifyingApplications pools)
162
+ _poolService.lockCollateral(
163
+ instance,
164
+ productNftId,
165
+ applicationNftId,
166
+ applicationInfo,
167
+ netPremiumAmount); // for pool book keeping (fee + additional capital)
168
+
169
+ // TODO: add logging
170
+ }
171
+
172
+
173
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
174
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
175
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
176
+ return collateralUFixed.toInt();
177
+ }
178
+
179
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
180
+ // check caller is registered product
181
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
182
+ InstanceReader instanceReader = instance.getInstanceReader();
183
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
184
+
185
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
186
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
187
+ }
188
+
189
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
190
+
191
+ uint256 netPremiumAmount = _processPremiumByTreasury(
192
+ instance,
193
+ policyNftId,
194
+ unpaidPremiumAmount);
195
+
196
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
197
+
198
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
199
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
200
+
201
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
202
+ activate(policyNftId, activateAt);
203
+ }
204
+
205
+ // TODO: add logging
206
+ }
207
+
208
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
209
+ // check caller is registered product
210
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
211
+ InstanceReader instanceReader = instance.getInstanceReader();
212
+
213
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
214
+
215
+ require(
216
+ policyInfo.activatedAt.eqz(),
217
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
218
+
219
+ policyInfo.activatedAt = activateAt;
220
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
221
+
222
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
223
+
224
+ // TODO: add logging
225
+ }
226
+
227
+
228
+ function expire(
229
+ NftId policyNftId
230
+ )
231
+ external
232
+ override
233
+ // solhint-disable-next-line no-empty-blocks
234
+ {
235
+
236
+ }
237
+
238
+ function close(
239
+ NftId policyNftId
240
+ )
241
+ external
242
+ override
243
+ {
244
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
245
+ InstanceReader instanceReader = instance.getInstanceReader();
246
+
247
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
248
+
249
+ if (policyInfo.activatedAt.eqz()) {
250
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
251
+ }
252
+
253
+ StateId state = instanceReader.getPolicyState(policyNftId);
254
+ if (state != ACTIVE()) {
255
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
256
+ }
257
+
258
+ if (policyInfo.closedAt.gtz()) {
259
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
260
+ }
261
+
262
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
263
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
264
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
265
+ }
266
+
267
+ if (policyInfo.openClaimsCount > 0) {
268
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
269
+ }
270
+
271
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
272
+
273
+ _poolService.releaseCollateral(
274
+ instance,
275
+ policyNftId,
276
+ policyInfo);
277
+
278
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
279
+ }
280
+
281
+ function submitClaim(
282
+ NftId policyNftId,
283
+ Amount claimAmount,
284
+ bytes memory claimData
285
+ )
286
+ external
287
+ virtual
288
+ returns (ClaimId claimId)
289
+ {
290
+ (
291
+ IInstance instance,
292
+ InstanceReader instanceReader,
293
+ IPolicy.PolicyInfo memory policyInfo
294
+ ) = _verifyCallerWithPolicy(policyNftId);
295
+
296
+ // check policy is in its active period
297
+ if(policyInfo.activatedAt.eqz() || TimestampLib.blockTimestamp() >= policyInfo.expiredAt) {
298
+ revert ErrorPolicyServicePolicyNotOpen(policyNftId);
299
+ }
300
+
301
+ // check policy including this claim is still within sum insured
302
+ if(policyInfo.payoutAmount.toInt() + claimAmount.toInt() > policyInfo.sumInsuredAmount) {
303
+ revert ErrorPolicyServiceClaimExceedsSumInsured(
304
+ policyNftId,
305
+ AmountLib.toAmount(policyInfo.sumInsuredAmount),
306
+ AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
307
+ }
308
+
309
+ // create new claim
310
+ claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
311
+ _claimService.submit(instance, policyNftId, claimId, claimAmount, claimData);
312
+
313
+ // update and save policy info with instance
314
+ policyInfo.claimsCount += 1;
315
+ policyInfo.openClaimsCount += 1;
316
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
317
+
318
+ emit LogPolicyServiceClaimSubmitted(policyNftId, claimId, claimAmount);
319
+ }
320
+
321
+ function confirmClaim(
322
+ NftId policyNftId,
323
+ ClaimId claimId,
324
+ Amount confirmedAmount
325
+ )
326
+ external
327
+ {
328
+ (
329
+ IInstance instance,
330
+ InstanceReader instanceReader,
331
+ IPolicy.PolicyInfo memory policyInfo
332
+ ) = _verifyCallerWithPolicy(policyNftId);
333
+
334
+ // check/update claim info
335
+ _claimService.confirm(instance, instanceReader, policyNftId, claimId, confirmedAmount);
336
+
337
+ // update and save policy info with instance
338
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CONFIRMED());
339
+
340
+ emit LogPolicyServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
341
+ }
342
+
343
+ function declineClaim(
344
+ NftId policyNftId,
345
+ ClaimId claimId
346
+ )
347
+ external
348
+ {
349
+ (
350
+ IInstance instance,
351
+ InstanceReader instanceReader,
352
+ IPolicy.PolicyInfo memory policyInfo
353
+ ) = _verifyCallerWithPolicy(policyNftId);
354
+
355
+ // check/update claim info
356
+ _claimService.decline(instance, instanceReader, policyNftId, claimId);
357
+
358
+ // update and save policy info with instance
359
+ policyInfo.openClaimsCount -= 1;
360
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
361
+
362
+ emit LogPolicyServiceClaimDeclined(policyNftId, claimId);
363
+ }
364
+
365
+ function closeClaim(
366
+ NftId policyNftId,
367
+ ClaimId claimId
368
+ )
369
+ external
370
+ {
371
+ (
372
+ IInstance instance,
373
+ InstanceReader instanceReader,
374
+ IPolicy.PolicyInfo memory policyInfo
375
+ ) = _verifyCallerWithPolicy(policyNftId);
376
+
377
+ // check/update claim info
378
+ _claimService.close(instance, instanceReader, policyNftId, claimId);
379
+
380
+ // update and save policy info with instance
381
+ policyInfo.openClaimsCount -= 1;
382
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
383
+
384
+ emit LogPolicyServiceClaimClosed(policyNftId, claimId);
385
+ }
386
+
387
+ function createPayout(
388
+ NftId policyNftId,
389
+ ClaimId claimId,
390
+ Amount amount,
391
+ bytes memory data
392
+ )
393
+ external
394
+ returns (PayoutId payoutId)
395
+ {
396
+ (
397
+ IInstance instance,
398
+ InstanceReader instanceReader,
399
+ IPolicy.PolicyInfo memory policyInfo
400
+ ) = _verifyCallerWithPolicy(policyNftId);
401
+
402
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
403
+ StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
404
+
405
+ // TODO add checks
406
+ // claim needs to be open
407
+ // claim.paidAmount + amount <= claim.claimAmount
408
+
409
+ // check/update claim info
410
+ uint8 claimNo = claimInfo.payoutsCount + 1;
411
+ payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
412
+ _claimService.createPayout(
413
+ instance,
414
+ policyNftId,
415
+ payoutId,
416
+ amount,
417
+ data);
418
+
419
+ // update and save policy info with instance
420
+ policyInfo.payoutAmount.add(amount);
421
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
422
+
423
+ emit LogPolicyServicePayoutCreated(policyNftId, payoutId, amount);
424
+ }
425
+
426
+ function processPayout(
427
+ NftId policyNftId,
428
+ PayoutId payoutId
429
+ )
430
+ external
431
+ {
432
+ (
433
+ IInstance instance,
434
+ InstanceReader instanceReader,
435
+ IPolicy.PolicyInfo memory policyInfo
436
+ ) = _verifyCallerWithPolicy(policyNftId);
437
+
438
+ // check/update claim info
439
+ (
440
+ Amount amount,
441
+ bool payoutIsClosingClaim
442
+ ) = _claimService.processPayout(
443
+ instance,
444
+ instanceReader,
445
+ policyNftId,
446
+ payoutId);
447
+
448
+ // update policy info if affected by processed payout
449
+ // last payout is processed, claim is fufilled
450
+ if(payoutIsClosingClaim) {
451
+ policyInfo.openClaimsCount -= 1;
452
+ // TODO if(policyInfo.openClaimsCount == 0)
453
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
454
+ }
455
+
456
+ emit LogPolicyServicePayoutProcessed(policyNftId, payoutId, amount);
457
+ }
458
+
459
+ function _verifyCallerWithPolicy(
460
+ NftId policyNftId
461
+ )
462
+ internal
463
+ returns (
464
+ IInstance instance,
465
+ InstanceReader instanceReader,
466
+ IPolicy.PolicyInfo memory policyInfo
467
+ )
468
+ {
469
+ NftId productNftId;
470
+ (productNftId,, instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
471
+ instanceReader = instance.getInstanceReader();
472
+
473
+ // check caller(product) policy match
474
+ policyInfo = instanceReader.getPolicyInfo(policyNftId);
475
+ if(policyInfo.productNftId != productNftId) {
476
+ revert ErrorPolicyServicePolicyProductMismatch(policyNftId,
477
+ policyInfo.productNftId,
478
+ productNftId);
479
+ }
480
+ }
481
+
482
+ function _getPoolNftId(
483
+ IInstance instance,
484
+ NftId productNftId
485
+ )
486
+ internal
487
+ view
488
+ returns (NftId poolNftid)
489
+ {
490
+ InstanceReader instanceReader = instance.getInstanceReader();
491
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
492
+ return productSetupInfo.poolNftId;
493
+ }
494
+
495
+
496
+ function _processPremiumByTreasury(
497
+ IInstance instance,
498
+ NftId policyNftId,
499
+ uint256 premiumExpectedAmount
500
+ )
501
+ internal
502
+ returns (uint256 netPremiumAmount)
503
+ {
504
+ // process token transfer(s)
505
+ if(premiumExpectedAmount == 0) {
506
+ return 0;
507
+ }
508
+
509
+ NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
510
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
511
+ IPolicy.Premium memory premium = _pricingService.calculatePremium(
512
+ productNftId,
513
+ policyInfo.riskId,
514
+ policyInfo.sumInsuredAmount,
515
+ policyInfo.lifetime,
516
+ policyInfo.applicationData,
517
+ policyInfo.bundleNftId,
518
+ policyInfo.referralId
519
+ );
520
+
521
+ if (premium.premiumAmount != premiumExpectedAmount) {
522
+ revert ErrorIPolicyServicePremiumMismatch(
523
+ policyNftId,
524
+ premiumExpectedAmount,
525
+ premium.premiumAmount);
526
+ }
527
+
528
+ address policyOwner = getRegistry().ownerOf(policyNftId);
529
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
530
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
531
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
532
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
533
+ }
534
+ // premiums are calculated already? -> fixed + var (- descount) shall be stored in premium struct?
535
+ uint256 productFeeAmountToTransfer = premium.productFeeFixAmount + premium.productFeeVarAmount;
536
+ uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
537
+ uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
538
+ uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
539
+ uint256 poolAmountToTransfer = premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer;
540
+ netPremiumAmount = premium.netPremiumAmount;
541
+
542
+ // move product fee to product wallet
543
+ {
544
+ address productWallet = productSetupInfo.wallet;
545
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
546
+ }
547
+
548
+ // move distribution fee to distribution wallet
549
+ {
550
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
551
+ address distributionWallet = distributionSetupInfo.wallet;
552
+ tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
553
+ _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
554
+ }
555
+
556
+ // move netpremium, bundleFee and poolFee to pool wallet
557
+ {
558
+ address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
559
+ tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
560
+ _poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
561
+ }
562
+
563
+ // validate total amount transferred
564
+ {
565
+ uint256 totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
566
+
567
+ if (premium.premiumAmount != totalTransferred) {
568
+ revert ErrorPolicyServiceTransferredPremiumMismatch(
569
+ policyNftId,
570
+ premium.premiumAmount,
571
+ totalTransferred);
572
+ }
573
+ }
574
+
575
+ // TODO: add logging
576
+ }
577
+ }