@etherisc/gif-next 0.0.2-aa8d0c4-506 → 0.0.2-aaa8646-641

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