@etherisc/gif-next 0.0.2-a7954cc-097 → 0.0.2-a81f316-187

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