@etherisc/gif-next 0.0.2-d551b5e-892 → 0.0.2-d5b7b78-706

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 (379) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +743 -168
  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} +152 -100
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +737 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +675 -258
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +525 -223
  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 +1030 -394
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +246 -164
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +919 -1206
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +569 -198
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -263
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +403 -369
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +295 -126
  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} +197 -166
  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 +69 -43
  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 +968 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1250 -202
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +450 -73
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  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} +150 -207
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +166 -290
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +75 -375
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -201
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +393 -356
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +321 -96
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +253 -446
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +301 -92
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +218 -230
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -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 +244 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +158 -215
  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 +257 -235
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +202 -318
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  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 +31 -183
  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 +127 -170
  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 +148 -227
  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/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  208. package/contracts/components/Component.sol +251 -0
  209. package/contracts/components/Distribution.sol +200 -83
  210. package/contracts/components/IComponent.sol +74 -0
  211. package/contracts/components/IDistributionComponent.sol +44 -17
  212. package/contracts/components/IPoolComponent.sol +88 -41
  213. package/contracts/components/IProductComponent.sol +10 -5
  214. package/contracts/components/Pool.sol +210 -178
  215. package/contracts/components/Product.sol +125 -124
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  217. package/contracts/instance/BundleManager.sol +14 -16
  218. package/contracts/instance/Cloneable.sol +7 -2
  219. package/contracts/instance/IInstance.sol +54 -14
  220. package/contracts/instance/IInstanceService.sol +43 -3
  221. package/contracts/instance/Instance.sol +129 -262
  222. package/contracts/instance/InstanceAccessManager.sol +410 -176
  223. package/contracts/instance/InstanceReader.sol +9 -34
  224. package/contracts/instance/InstanceService.sol +404 -161
  225. package/contracts/instance/InstanceServiceManager.sol +6 -9
  226. package/contracts/instance/ObjectManager.sol +10 -29
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/base/KeyValueStore.sol +5 -2
  229. package/contracts/instance/base/Lifecycle.sol +11 -2
  230. package/contracts/instance/module/IAccess.sol +36 -20
  231. package/contracts/instance/module/IBundle.sol +2 -1
  232. package/contracts/instance/module/IComponents.sol +35 -0
  233. package/contracts/instance/module/IDistribution.sol +2 -0
  234. package/contracts/instance/module/IPolicy.sol +30 -3
  235. package/contracts/instance/module/ISetup.sol +7 -20
  236. package/contracts/instance/service/ApplicationService.sol +350 -0
  237. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  238. package/contracts/instance/service/BundleService.sol +336 -0
  239. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  240. package/contracts/instance/service/ClaimService.sol +151 -0
  241. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  242. package/contracts/instance/service/DistributionService.sol +397 -48
  243. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +62 -0
  246. package/contracts/instance/service/IClaimService.sol +61 -0
  247. package/contracts/instance/service/IDistributionService.sol +86 -0
  248. package/contracts/instance/service/IPolicyService.sol +38 -53
  249. package/contracts/instance/service/IPoolService.sol +19 -35
  250. package/contracts/instance/service/IProductService.sol +2 -2
  251. package/contracts/instance/service/PolicyService.sol +207 -317
  252. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  253. package/contracts/instance/service/PoolService.sol +133 -230
  254. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  255. package/contracts/instance/service/ProductService.sol +108 -40
  256. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  257. package/contracts/registry/ChainNft.sol +9 -1
  258. package/contracts/registry/IRegistry.sol +39 -19
  259. package/contracts/registry/IRegistryService.sol +30 -13
  260. package/contracts/registry/ITransferInterceptor.sol +1 -0
  261. package/contracts/registry/Registry.sol +243 -224
  262. package/contracts/registry/RegistryAccessManager.sol +216 -0
  263. package/contracts/registry/RegistryService.sol +96 -171
  264. package/contracts/registry/RegistryServiceManager.sol +21 -39
  265. package/contracts/registry/ReleaseManager.sol +322 -0
  266. package/contracts/registry/TokenRegistry.sol +22 -17
  267. package/contracts/shared/ERC165.sol +14 -12
  268. package/contracts/shared/INftOwnable.sol +11 -10
  269. package/contracts/shared/IPolicyHolder.sol +26 -0
  270. package/contracts/shared/IRegisterable.sol +4 -6
  271. package/contracts/shared/IRegistryLinked.sol +12 -0
  272. package/contracts/shared/IService.sol +4 -1
  273. package/contracts/shared/IVersionable.sol +4 -47
  274. package/contracts/shared/NftOwnable.sol +66 -80
  275. package/contracts/shared/PolicyHolder.sol +81 -0
  276. package/contracts/shared/ProxyManager.sol +100 -25
  277. package/contracts/shared/Registerable.sol +16 -32
  278. package/contracts/shared/RegistryLinked.sol +48 -0
  279. package/contracts/shared/Service.sol +25 -22
  280. package/contracts/shared/TokenHandler.sol +11 -5
  281. package/contracts/shared/Versionable.sol +4 -92
  282. package/contracts/test/TestRegisterable.sol +1 -1
  283. package/contracts/test/TestService.sol +4 -3
  284. package/contracts/types/Blocknumber.sol +1 -0
  285. package/contracts/types/ClaimId.sol +52 -0
  286. package/contracts/types/DistributorType.sol +2 -2
  287. package/contracts/types/Fee.sol +1 -0
  288. package/contracts/types/NftId.sol +8 -0
  289. package/contracts/types/ObjectType.sol +10 -5
  290. package/contracts/types/PayoutId.sol +54 -0
  291. package/contracts/types/Referral.sol +4 -0
  292. package/contracts/types/RoleId.sol +26 -20
  293. package/contracts/types/Seconds.sol +54 -0
  294. package/contracts/types/StateId.sol +1 -0
  295. package/contracts/types/Timestamp.sol +13 -13
  296. package/contracts/types/UFixed.sol +1 -0
  297. package/contracts/types/Version.sol +1 -0
  298. package/package.json +3 -3
  299. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  300. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  301. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -368
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  308. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  310. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  312. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  314. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  316. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  318. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  320. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  324. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  327. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  329. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  333. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  335. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  337. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  339. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  341. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  342. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  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 -827
  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 -132
  356. package/contracts/components/IBaseComponent.sol +0 -31
  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/IAccessManagerSimple.sol +0 -391
  373. package/contracts/instance/IInstanceBase.sol +0 -26
  374. package/contracts/instance/InstanceBase.sol +0 -41
  375. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  376. package/contracts/instance/base/IInstanceBase.sol +0 -23
  377. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  378. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  379. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,53 +2,47 @@
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 {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
18
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
- import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
- import {ObjectType, INSTANCE, PRODUCT, POLICY} 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";
19
+ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
20
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
21
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
32
22
  import {StateId} from "../../types/StateId.sol";
33
- import {Version, VersionLib} from "../../types/Version.sol";
34
- //import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
23
 
24
+ import {ComponentService} from "../base/ComponentService.sol";
25
+ import {IApplicationService} from "./IApplicationService.sol";
26
+ import {IBundleService} from "./IBundleService.sol";
27
+ import {IDistributionService} from "./IDistributionService.sol";
28
+ import {InstanceReader} from "../InstanceReader.sol";
29
+ import {IPolicyService} from "./IPolicyService.sol";
30
+ import {IPoolService} from "./IPoolService.sol";
36
31
  import {IService} from "../../shared/IService.sol";
37
32
  import {Service} from "../../shared/Service.sol";
38
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
39
- import {IPolicyService} from "./IPolicyService.sol";
40
- import {InstanceReader} from "../InstanceReader.sol";
41
- import {IPoolService} from "./PoolService.sol";
42
- import {POOL_SERVICE_NAME} from "./PoolService.sol";
43
33
 
44
- string constant PRODUCT_SERVICE_NAME = "ProductService";
45
34
 
46
- contract PolicyService is ComponentServiceBase, IPolicyService {
35
+ contract PolicyService is
36
+ ComponentService,
37
+ IPolicyService
38
+ {
47
39
  using NftIdLib for NftId;
48
-
49
- string public constant NAME = "PolicyService";
40
+ using TimestampLib for Timestamp;
50
41
 
51
42
  IPoolService internal _poolService;
43
+ IBundleService internal _bundleService;
44
+ IApplicationService internal _applicationService;
45
+ IDistributionService internal _distributionService;
52
46
 
53
47
  event LogProductServiceSender(address sender);
54
48
 
@@ -57,23 +51,26 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
57
51
  bytes memory data
58
52
  )
59
53
  internal
60
- initializer
61
54
  virtual override
55
+ initializer
62
56
  {
63
57
  address registryAddress;
64
58
  address initialOwner;
65
59
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
66
60
 
67
- _initializeService(registryAddress, owner);
61
+ initializeService(registryAddress, owner);
68
62
 
69
- _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
63
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
64
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
65
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), getMajorVersion()));
66
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion()));
70
67
 
71
- _registerInterface(type(IPolicyService).interfaceId);
68
+ registerInterface(type(IPolicyService).interfaceId);
72
69
  }
73
70
 
74
71
 
75
- function getName() public pure override(IService, Service) returns(string memory name) {
76
- return NAME;
72
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
73
+ return POLICY();
77
74
  }
78
75
 
79
76
 
@@ -82,151 +79,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
82
79
  (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
83
80
  product = Product(productInfo.objectAddress);
84
81
  }
85
- // TODO no access restrictions
86
- function calculatePremium(
87
- RiskId riskId,
88
- uint256 sumInsuredAmount,
89
- uint256 lifetime,
90
- bytes memory applicationData,
91
- NftId bundleNftId,
92
- ReferralId referralId
93
- )
94
- public
95
- view
96
- override
97
- returns (
98
- uint256 premiumAmount,
99
- uint256 productFeeAmount,
100
- uint256 poolFeeAmount,
101
- uint256 bundleFeeAmount,
102
- uint256 distributionFeeAmount
103
- )
104
- {
105
- Product product = _getAndVerifyInstanceAndProduct();
106
- uint256 netPremiumAmount = product.calculateNetPremium(
107
- sumInsuredAmount,
108
- riskId,
109
- lifetime,
110
- applicationData
111
- );
112
-
113
- (
114
- productFeeAmount,
115
- poolFeeAmount,
116
- bundleFeeAmount,
117
- distributionFeeAmount
118
- ) = _calculateFeeAmounts(
119
- netPremiumAmount,
120
- product,
121
- bundleNftId,
122
- referralId
123
- );
124
-
125
- premiumAmount = netPremiumAmount + productFeeAmount;
126
- premiumAmount += poolFeeAmount + bundleFeeAmount;
127
- premiumAmount += distributionFeeAmount;
128
- }
129
-
130
- function _calculateFeeAmounts(
131
- uint256 netPremiumAmount,
132
- Product product,
133
- NftId bundleNftId,
134
- ReferralId referralId
135
- )
136
- internal
137
- view
138
- returns (
139
- uint256 productFeeAmount,
140
- uint256 poolFeeAmount,
141
- uint256 bundleFeeAmount,
142
- uint256 distributionFeeAmount
143
- )
144
- {
145
- InstanceReader instanceReader;
146
- {
147
- IInstance instance = product.getInstance();
148
- instanceReader = instance.getInstanceReader();
149
- }
150
-
151
- NftId poolNftId = product.getPoolNftId();
152
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
153
- require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
154
-
155
- {
156
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
157
- (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
158
- }
159
- {
160
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
161
- (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
162
- }
163
- {
164
- NftId distributionNftId = product.getDistributionNftId();
165
- ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
166
- (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
167
- }
168
-
169
- (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
170
- }
171
-
172
-
173
- function createApplication(
174
- address applicationOwner,
175
- RiskId riskId,
176
- uint256 sumInsuredAmount,
177
- uint256 lifetime,
178
- bytes memory applicationData,
179
- NftId bundleNftId,
180
- ReferralId referralId
181
- ) external override returns (NftId policyNftId) {
182
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
183
- // TODO add validations (see create bundle in pool service)
184
-
185
- policyNftId = getRegistryService().registerPolicy(
186
- IRegistry.ObjectInfo(
187
- zeroNftId(),
188
- productInfo.nftId,
189
- POLICY(),
190
- false, // intercepting property for policies is defined on product
191
- address(0),
192
- applicationOwner,
193
- ""
194
- )
195
- );
196
-
197
- (uint256 premiumAmount,,,,) = calculatePremium(
198
- riskId,
199
- sumInsuredAmount,
200
- lifetime,
201
- applicationData,
202
- bundleNftId,
203
- referralId
204
- );
205
-
206
- IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
207
- productInfo.nftId,
208
- bundleNftId,
209
- referralId,
210
- riskId,
211
- sumInsuredAmount,
212
- premiumAmount,
213
- 0,
214
- lifetime,
215
- applicationData,
216
- "",
217
- 0,
218
- 0,
219
- 0,
220
- zeroTimestamp(),
221
- zeroTimestamp(),
222
- zeroTimestamp()
223
- );
224
-
225
- instance.createPolicy(policyNftId, policyInfo);
226
- instance.updatePolicyState(policyNftId, APPLIED());
227
-
228
- // TODO add logging
229
- }
230
82
 
231
83
  function _getAndVerifyUnderwritingSetup(
232
84
  IInstance instance,
@@ -237,127 +89,80 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
237
89
  internal
238
90
  view
239
91
  returns (
92
+ NftId poolNftId,
240
93
  NftId bundleNftId,
241
94
  IBundle.BundleInfo memory bundleInfo,
242
95
  uint256 collateralAmount
243
96
  )
244
97
  {
245
98
  // check match between policy and bundle (via pool)
99
+ poolNftId = productSetupInfo.poolNftId;
246
100
  bundleNftId = policyInfo.bundleNftId;
247
101
  bundleInfo = instanceReader.getBundleInfo(bundleNftId);
248
- require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
102
+ require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
249
103
 
250
104
  // calculate required collateral
251
- NftId poolNftId = productSetupInfo.poolNftId;
252
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
105
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
106
+ IComponents.PoolInfo memory poolInfo = abi.decode(
107
+ componentInfo.data, (IComponents.PoolInfo));
253
108
 
254
109
  // obtain remaining return values
110
+ // TODO required collateral amount should be calculated by pool service, not policy service
255
111
  collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
256
112
  }
257
113
 
258
- function _lockCollateralInBundle(
259
- IInstance instance,
260
- NftId bundleNftId,
261
- IBundle.BundleInfo memory bundleInfo,
262
- NftId policyNftId,
263
- uint256 collateralAmount
264
- )
265
- internal
266
- returns (IBundle.BundleInfo memory)
267
- {
268
- bundleInfo.lockedAmount += collateralAmount;
269
- // TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
270
- return bundleInfo;
271
- }
272
-
273
- function _underwriteByPool(
274
- NftId poolNftId,
275
- NftId policyNftId,
276
- IPolicy.PolicyInfo memory policyInfo,
277
- bytes memory bundleFilter,
278
- uint256 collateralAmount
279
- )
280
- internal
281
- {
282
- address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
283
- IPoolComponent pool = IPoolComponent(poolAddress);
284
- pool.underwrite(
285
- policyNftId,
286
- policyInfo.applicationData,
287
- bundleFilter,
288
- collateralAmount);
289
- }
290
-
291
114
 
292
- function revoke(
115
+ function decline(
293
116
  NftId policyNftId
294
117
  )
295
118
  external
296
119
  override
297
120
  {
298
- require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
121
+ require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
299
122
  }
300
123
 
301
124
 
125
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
302
126
  function underwrite(
303
- NftId policyNftId,
127
+ NftId applicationNftId, // = policyNftId
304
128
  bool requirePremiumPayment,
305
129
  Timestamp activateAt
306
130
  )
307
131
  external
308
- override
132
+ virtual override
309
133
  {
310
134
  // check caller is registered product
311
- (
312
- IRegistry.ObjectInfo memory productInfo,
313
- IInstance instance
314
- ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
315
- InstanceReader instanceReader = instance.getInstanceReader();
316
-
317
- // check match between policy and calling product
318
- NftId productNftId = productInfo.nftId;
319
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
320
- require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
321
- require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
322
-
323
- NftId bundleNftId;
324
- IBundle.BundleInfo memory bundleInfo;
325
- uint256 collateralAmount;
326
- uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
135
+ IInstance instance;
136
+ InstanceReader instanceReader;
137
+ NftId productNftId;
327
138
  {
328
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
329
- IBundle.BundleInfo memory bundleInfo;
330
-
331
- (
332
- bundleNftId,
333
- bundleInfo,
334
- collateralAmount
335
- ) = _getAndVerifyUnderwritingSetup(
336
- instance,
337
- instanceReader,
338
- policyInfo,
339
- productSetupInfo
340
- );
139
+ IRegistry.ObjectInfo memory productInfo;
140
+ (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
141
+ instanceReader = instance.getInstanceReader();
142
+ productNftId = productInfo.nftId;
341
143
  }
342
144
 
145
+ // check policy matches with calling product
146
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
147
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
343
148
 
344
- // lock bundle collateral
345
- bundleInfo = _lockCollateralInBundle(
346
- instance,
347
- bundleNftId,
348
- bundleInfo,
349
- policyNftId,
350
- collateralAmount);
149
+ // check policy is in state applied
150
+ require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
351
151
 
352
- // lock bundle collateral
353
- bundleInfo = _lockCollateralInBundle(
152
+ (
153
+ NftId poolNftId,
154
+ NftId bundleNftId,
155
+ IBundle.BundleInfo memory bundleInfo,
156
+ uint256 collateralAmount
157
+ ) = _getAndVerifyUnderwritingSetup(
354
158
  instance,
355
- bundleNftId,
356
- bundleInfo,
357
- policyNftId,
358
- collateralAmount);
359
- StateId newPolicyState = UNDERWRITTEN();
159
+ instanceReader,
160
+ policyInfo,
161
+ instanceReader.getProductSetupInfo(productNftId)
162
+ );
360
163
 
164
+ StateId newPolicyState = UNDERWRITTEN();
165
+
361
166
  // optional activation of policy
362
167
  if(activateAt > zeroTimestamp()) {
363
168
  newPolicyState = ACTIVE();
@@ -365,38 +170,61 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
365
170
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
366
171
  }
367
172
 
173
+ // lock bundle collateral
174
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
175
+
368
176
  // optional collection of premium
369
177
  if(requirePremiumPayment) {
370
178
  netPremiumAmount = _processPremiumByTreasury(
371
179
  instance,
372
- productInfo.nftId,
373
- policyNftId,
180
+ applicationNftId,
374
181
  policyInfo.premiumAmount);
375
182
 
376
183
  policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
377
184
  }
378
185
 
379
- _poolService.underwritePolicy(instance, policyNftId, bundleNftId, collateralAmount, netPremiumAmount);
380
- instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
186
+ // lock collateral and update bundle book keeping
187
+ // TODO introduct indirection via pool service?
188
+ // well pool would only need to be involved when a part of the collateral
189
+ // is provided by a "re insurance policy" of the pool
190
+ // but then again the policiy would likely best be attached to the bundle. really? why?
191
+ // retention level: fraction of sum insured that product will cover from pool funds directly
192
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
193
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
194
+ // open points:
195
+ // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
196
+ // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
197
+ bundleInfo = _bundleService.lockCollateral(
198
+ instance,
199
+ applicationNftId,
200
+ bundleNftId,
201
+ collateralAmount,
202
+ netPremiumAmount);
381
203
 
382
- // involve pool if necessary
204
+ instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
205
+
206
+ // also verify/confirm application by pool if necessary
207
+ if(abi.decode(
208
+ instanceReader.getComponentInfo(poolNftId).data,
209
+ (IComponents.PoolInfo)
210
+ ).isVerifyingApplications
211
+ )
383
212
  {
384
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
385
-
386
- if(poolInfo.isConfirmingApplication) {
387
- _underwriteByPool(
388
- bundleInfo.poolNftId,
389
- policyNftId,
390
- policyInfo,
391
- bundleInfo.filter,
392
- collateralAmount
393
- );
394
- }
213
+ IPoolComponent pool = IPoolComponent(
214
+ getRegistry().getObjectInfo(poolNftId).objectAddress);
215
+
216
+ pool.verifyApplication(
217
+ applicationNftId,
218
+ policyInfo.applicationData,
219
+ bundleNftId,
220
+ bundleInfo.filter,
221
+ collateralAmount);
395
222
  }
396
223
 
397
- // TODO add logging
224
+ // TODO: add logging
398
225
  }
399
226
 
227
+
400
228
  function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
401
229
  UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
402
230
  UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
@@ -407,28 +235,29 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
407
235
  // check caller is registered product
408
236
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
409
237
  InstanceReader instanceReader = instance.getInstanceReader();
238
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
410
239
 
411
- // TODO: check if not paid
412
- // TODO: transfer premium
413
- // TODO: optionally activate
240
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
241
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
242
+ }
414
243
 
415
- // // perform actual token transfers (this code is probably not complete)
416
- // IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
417
-
418
- // uint256 premiumAmount = policyInfo.premiumAmount;
419
- // _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
244
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
420
245
 
421
- // // policy level book keeping for premium paid
422
- // policyInfo.premiumPaidAmount += premiumAmount;
246
+ uint256 netPremiumAmount = _processPremiumByTreasury(
247
+ instance,
248
+ policyNftId,
249
+ unpaidPremiumAmount);
250
+
251
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
423
252
 
424
- // instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
253
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
254
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
425
255
 
426
- // // optional activation of policy
427
- // if(activateAt > zeroTimestamp()) {
428
- // activate(policyNftId, activateAt);
429
- // }
256
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
257
+ activate(policyNftId, activateAt);
258
+ }
430
259
 
431
- // TODO add logging
260
+ // TODO: add logging
432
261
  }
433
262
 
434
263
  function activate(NftId policyNftId, Timestamp activateAt) public override {
@@ -447,14 +276,60 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
447
276
 
448
277
  instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
449
278
 
450
- // TODO add logging
279
+ // TODO: add logging
280
+ }
281
+
282
+
283
+ function expire(
284
+ NftId policyNftId
285
+ )
286
+ external
287
+ override
288
+ // solhint-disable-next-line no-empty-blocks
289
+ {
290
+
451
291
  }
452
292
 
453
293
  function close(
454
294
  NftId policyNftId
455
- ) external override // solhint-disable-next-line no-empty-blocks
295
+ )
296
+ external
297
+ override
456
298
  {
299
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
300
+ InstanceReader instanceReader = instance.getInstanceReader();
301
+
302
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
457
303
 
304
+ if (policyInfo.activatedAt.eqz()) {
305
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
306
+ }
307
+
308
+ StateId state = instanceReader.getPolicyState(policyNftId);
309
+ if (state != ACTIVE()) {
310
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
311
+ }
312
+
313
+ if (policyInfo.closedAt.gtz()) {
314
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
315
+ }
316
+
317
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
318
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
319
+ }
320
+
321
+ if (policyInfo.openClaimsCount > 0) {
322
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
323
+ }
324
+
325
+ if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
326
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
327
+ }
328
+
329
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
330
+
331
+ _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
332
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
458
333
  }
459
334
 
460
335
  function _getPoolNftId(
@@ -473,7 +348,6 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
473
348
 
474
349
  function _processPremiumByTreasury(
475
350
  IInstance instance,
476
- NftId productNftId,
477
351
  NftId policyNftId,
478
352
  uint256 premiumAmount
479
353
  )
@@ -482,32 +356,48 @@ contract PolicyService is ComponentServiceBase, IPolicyService {
482
356
  {
483
357
  // process token transfer(s)
484
358
  if(premiumAmount > 0) {
359
+ NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
485
360
  ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
361
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
486
362
  TokenHandler tokenHandler = productSetupInfo.tokenHandler;
487
363
  address policyOwner = getRegistry().ownerOf(policyNftId);
488
- ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
489
- address poolWallet = poolSetupInfo.wallet;
490
- netPremiumAmount = premiumAmount;
491
- Fee memory productFee = productSetupInfo.productFee;
492
-
493
- if (FeeLib.feeIsZero(productFee)) {
494
- tokenHandler.transfer(
495
- policyOwner,
496
- poolWallet,
497
- premiumAmount
364
+ address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
365
+ IPolicy.Premium memory premium = _applicationService.calculatePremium(
366
+ productNftId,
367
+ policyInfo.riskId,
368
+ policyInfo.sumInsuredAmount,
369
+ policyInfo.lifetime,
370
+ policyInfo.applicationData,
371
+ policyInfo.bundleNftId,
372
+ policyInfo.referralId
498
373
  );
499
- } else {
500
- (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
501
- address productWallet = productSetupInfo.wallet;
502
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
503
- revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
504
- }
505
- tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
506
- tokenHandler.transfer(policyOwner, poolWallet, netAmount);
507
- netPremiumAmount = netAmount;
374
+
375
+ if (premium.premiumAmount != premiumAmount) {
376
+ revert ErrorIPolicyServicePremiumMismatch(policyNftId, premiumAmount, premium.premiumAmount);
508
377
  }
378
+
379
+ // move product fee to product wallet
380
+ address productWallet = productSetupInfo.wallet;
381
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
382
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
383
+ }
384
+ tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
385
+
386
+ // move distribution fee to distribution wallet
387
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
388
+ address distributionWallet = distributionSetupInfo.wallet;
389
+ uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
390
+ tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
391
+ _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
392
+
393
+ // move netpremium to pool wallet
394
+ tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
395
+
396
+ // TODO: move pool related tokens too
397
+ // TODO: move bundle related tokens too
398
+ netPremiumAmount = premium.netPremiumAmount;
509
399
  }
510
400
 
511
- // TODO add logging
401
+ // TODO: add logging
512
402
  }
513
403
  }