@etherisc/gif-next 0.0.2-b244df3-779 → 0.0.2-b38343e-249

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