@etherisc/gif-next 0.0.2-771d9e9-515 → 0.0.2-77a1ccf-469

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 (351) hide show
  1. package/README.md +136 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +774 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +892 -231
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +164 -159
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +699 -22
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +838 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +524 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +950 -281
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +559 -235
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1847 -178
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +194 -165
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +904 -1117
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +126 -159
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +428 -273
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +302 -101
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +189 -177
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  48. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  54. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  56. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  58. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  60. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  62. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  64. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  66. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1057 -220
  68. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +425 -80
  70. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  72. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  74. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
  76. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +596 -184
  78. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +519 -0
  80. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +37 -251
  82. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
  84. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1000 -0
  86. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  88. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +209 -337
  90. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +296 -107
  92. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  94. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  96. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  98. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +208 -224
  100. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  101. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +243 -206
  102. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  103. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/Registry.sol/Registry.json +222 -330
  105. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  106. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  107. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +235 -295
  109. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +295 -150
  111. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  112. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  113. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  115. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  120. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  121. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  124. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  125. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  126. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  132. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  133. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  138. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  140. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  142. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  143. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  145. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  147. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  152. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  154. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  158. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  159. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  160. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  163. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  164. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  166. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  169. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  171. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  173. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  176. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  178. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  180. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  182. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  184. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  186. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  189. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  193. package/contracts/components/Component.sol +221 -0
  194. package/contracts/components/Distribution.sol +206 -73
  195. package/contracts/components/IComponent.sol +68 -0
  196. package/contracts/components/IDistributionComponent.sol +44 -9
  197. package/contracts/components/IPoolComponent.sol +126 -37
  198. package/contracts/components/IProductComponent.sol +10 -5
  199. package/contracts/components/Pool.sol +288 -153
  200. package/contracts/components/Product.sol +126 -134
  201. package/contracts/instance/BundleManager.sol +125 -0
  202. package/contracts/instance/Cloneable.sol +46 -0
  203. package/contracts/instance/IInstance.sol +61 -8
  204. package/contracts/instance/IInstanceService.sol +33 -4
  205. package/contracts/instance/Instance.sol +112 -264
  206. package/contracts/instance/InstanceAccessManager.sol +87 -78
  207. package/contracts/instance/InstanceReader.sol +12 -25
  208. package/contracts/instance/InstanceService.sol +405 -97
  209. package/contracts/instance/InstanceServiceManager.sol +11 -13
  210. package/contracts/instance/ObjectManager.sol +84 -0
  211. package/contracts/instance/base/ComponentService.sol +134 -0
  212. package/contracts/instance/module/IAccess.sol +27 -18
  213. package/contracts/instance/module/IBundle.sol +2 -1
  214. package/contracts/instance/module/IDistribution.sol +2 -0
  215. package/contracts/instance/module/IPolicy.sol +30 -3
  216. package/contracts/instance/module/ISetup.sol +12 -10
  217. package/contracts/instance/service/ApplicationService.sol +349 -0
  218. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  219. package/contracts/instance/service/BundleService.sol +299 -0
  220. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  221. package/contracts/instance/service/ClaimService.sol +151 -0
  222. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  223. package/contracts/instance/service/DistributionService.sol +336 -29
  224. package/contracts/instance/service/DistributionServiceManager.sol +11 -13
  225. package/contracts/instance/service/IApplicationService.sol +82 -0
  226. package/contracts/instance/service/IBundleService.sol +55 -0
  227. package/contracts/instance/service/IClaimService.sol +61 -0
  228. package/contracts/instance/service/IDistributionService.sol +74 -0
  229. package/contracts/instance/service/IPolicyService.sol +70 -0
  230. package/contracts/instance/service/IPoolService.sol +6 -23
  231. package/contracts/instance/service/IProductService.sol +6 -73
  232. package/contracts/instance/service/PolicyService.sol +402 -0
  233. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  234. package/contracts/instance/service/PoolService.sol +40 -124
  235. package/contracts/instance/service/PoolServiceManager.sol +11 -13
  236. package/contracts/instance/service/ProductService.sol +233 -0
  237. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  238. package/contracts/registry/ChainNft.sol +1 -1
  239. package/contracts/registry/IRegistry.sol +38 -33
  240. package/contracts/registry/IRegistryService.sol +47 -13
  241. package/contracts/registry/Registry.sol +225 -250
  242. package/contracts/registry/RegistryAccessManager.sol +216 -0
  243. package/contracts/registry/RegistryService.sol +113 -229
  244. package/contracts/registry/RegistryServiceManager.sol +21 -39
  245. package/contracts/registry/ReleaseManager.sol +322 -0
  246. package/contracts/registry/TokenRegistry.sol +22 -17
  247. package/contracts/shared/ERC165.sol +14 -12
  248. package/contracts/shared/INftOwnable.sol +11 -10
  249. package/contracts/shared/IPolicyHolder.sol +26 -0
  250. package/contracts/shared/IRegisterable.sol +4 -6
  251. package/contracts/shared/IRegistryLinked.sol +12 -0
  252. package/contracts/shared/IService.sol +4 -1
  253. package/contracts/shared/IVersionable.sol +4 -47
  254. package/contracts/shared/NftOwnable.sol +67 -83
  255. package/contracts/shared/PolicyHolder.sol +81 -0
  256. package/contracts/shared/ProxyManager.sol +100 -25
  257. package/contracts/shared/Registerable.sol +16 -32
  258. package/contracts/shared/RegistryLinked.sol +48 -0
  259. package/contracts/shared/Service.sol +25 -22
  260. package/contracts/shared/Versionable.sol +4 -92
  261. package/contracts/test/TestRegisterable.sol +1 -1
  262. package/contracts/test/TestService.sol +4 -3
  263. package/contracts/types/ClaimId.sol +52 -0
  264. package/contracts/types/DistributorType.sol +2 -2
  265. package/contracts/types/NftIdSet.sol +26 -24
  266. package/contracts/types/ObjectType.sol +9 -5
  267. package/contracts/types/PayoutId.sol +54 -0
  268. package/contracts/types/RoleId.sol +19 -13
  269. package/contracts/types/Seconds.sol +54 -0
  270. package/contracts/types/Timestamp.sol +12 -13
  271. package/package.json +3 -3
  272. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  273. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  274. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  275. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  276. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  277. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  278. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  279. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  280. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  281. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  282. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  283. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  284. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  285. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  286. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  287. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  288. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  289. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  290. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  291. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  292. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  293. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  294. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  295. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  296. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  297. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  298. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  299. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  301. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  303. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  305. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  307. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  309. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  311. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  313. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  315. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  316. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  317. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  318. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  319. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  320. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  321. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  322. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  323. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  325. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  326. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  327. package/contracts/components/BaseComponent.sol +0 -91
  328. package/contracts/components/IBaseComponent.sol +0 -25
  329. package/contracts/experiment/cloning/Cloner.sol +0 -47
  330. package/contracts/experiment/errors/Require.sol +0 -38
  331. package/contracts/experiment/errors/Revert.sol +0 -44
  332. package/contracts/experiment/inheritance/A.sol +0 -53
  333. package/contracts/experiment/inheritance/B.sol +0 -28
  334. package/contracts/experiment/inheritance/C.sol +0 -34
  335. package/contracts/experiment/inheritance/IA.sol +0 -13
  336. package/contracts/experiment/inheritance/IB.sol +0 -10
  337. package/contracts/experiment/inheritance/IC.sol +0 -12
  338. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  339. package/contracts/experiment/statemachine/ISM.sol +0 -25
  340. package/contracts/experiment/statemachine/SM.sol +0 -57
  341. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  342. package/contracts/experiment/types/TypeA.sol +0 -47
  343. package/contracts/experiment/types/TypeB.sol +0 -29
  344. package/contracts/instance/AccessManagedSimple.sol +0 -115
  345. package/contracts/instance/AccessManagerSimple.sol +0 -692
  346. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  347. package/contracts/instance/base/ComponentServiceBase.sol +0 -118
  348. package/contracts/instance/base/IInstanceBase.sol +0 -23
  349. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  350. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  351. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,402 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
7
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
8
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
9
+ import {IInstance} from "../IInstance.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+ import {IRisk} from "../module/IRisk.sol";
12
+ import {IBundle} from "../module/IBundle.sol";
13
+ import {IProductService} from "./IProductService.sol";
14
+ import {ITreasury} from "../module/ITreasury.sol";
15
+ import {ISetup} from "../module/ISetup.sol";
16
+
17
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
18
+
19
+ import {IVersionable} from "../../shared/IVersionable.sol";
20
+ import {Versionable} from "../../shared/Versionable.sol";
21
+
22
+ import {Seconds} from "../../types/Seconds.sol";
23
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
24
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
+ import {ObjectType, APPLICATION, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
27
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} 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";
32
+ 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
+
36
+ import {IService} from "../../shared/IService.sol";
37
+ import {Service} from "../../shared/Service.sol";
38
+ import {ComponentService} from "../base/ComponentService.sol";
39
+ import {IApplicationService} from "./IApplicationService.sol";
40
+ import {IPolicyService} from "./IPolicyService.sol";
41
+ import {InstanceReader} from "../InstanceReader.sol";
42
+ import {IPoolService} from "./IPoolService.sol";
43
+ import {IBundleService} from "./IBundleService.sol";
44
+
45
+
46
+ contract PolicyService is
47
+ ComponentService,
48
+ IPolicyService
49
+ {
50
+ using NftIdLib for NftId;
51
+ using TimestampLib for Timestamp;
52
+
53
+ IPoolService internal _poolService;
54
+ IBundleService internal _bundleService;
55
+ IApplicationService internal _applicationService;
56
+
57
+ event LogProductServiceSender(address sender);
58
+
59
+ function _initialize(
60
+ address owner,
61
+ bytes memory data
62
+ )
63
+ internal
64
+ virtual override
65
+ initializer
66
+ {
67
+ address registryAddress;
68
+ address initialOwner;
69
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
70
+
71
+ initializeService(registryAddress, owner);
72
+
73
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
74
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
75
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), getMajorVersion()));
76
+
77
+ registerInterface(type(IPolicyService).interfaceId);
78
+ }
79
+
80
+
81
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
82
+ return POLICY();
83
+ }
84
+
85
+
86
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
87
+ IRegistry.ObjectInfo memory productInfo;
88
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
89
+ product = Product(productInfo.objectAddress);
90
+ }
91
+
92
+ function _getAndVerifyUnderwritingSetup(
93
+ IInstance instance,
94
+ InstanceReader instanceReader,
95
+ IPolicy.PolicyInfo memory policyInfo,
96
+ ISetup.ProductSetupInfo memory productSetupInfo
97
+ )
98
+ internal
99
+ view
100
+ returns (
101
+ NftId poolNftId,
102
+ NftId bundleNftId,
103
+ IBundle.BundleInfo memory bundleInfo,
104
+ uint256 collateralAmount
105
+ )
106
+ {
107
+ // check match between policy and bundle (via pool)
108
+ poolNftId = productSetupInfo.poolNftId;
109
+ bundleNftId = policyInfo.bundleNftId;
110
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
111
+ require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
112
+
113
+ // calculate required collateral
114
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
115
+
116
+ // obtain remaining return values
117
+ // TODO required collateral amount should be calculated by pool service, not policy service
118
+ collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
119
+ }
120
+
121
+
122
+ function decline(
123
+ NftId policyNftId
124
+ )
125
+ external
126
+ override
127
+ {
128
+ require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
129
+ }
130
+
131
+
132
+ /// @dev underwites application which includes the locking of the required collateral from the pool.
133
+ function underwrite(
134
+ NftId applicationNftId, // = policyNftId
135
+ bool requirePremiumPayment,
136
+ Timestamp activateAt
137
+ )
138
+ external
139
+ virtual override
140
+ {
141
+ // check caller is registered product
142
+ IInstance instance;
143
+ InstanceReader instanceReader;
144
+ NftId productNftId;
145
+ {
146
+ IRegistry.ObjectInfo memory productInfo;
147
+ (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
148
+ instanceReader = instance.getInstanceReader();
149
+ productNftId = productInfo.nftId;
150
+ }
151
+
152
+ // check policy matches with calling product
153
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
154
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
155
+
156
+ // check policy is in state applied
157
+ require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
158
+
159
+ (
160
+ NftId poolNftId,
161
+ NftId bundleNftId,
162
+ IBundle.BundleInfo memory bundleInfo,
163
+ uint256 collateralAmount
164
+ ) = _getAndVerifyUnderwritingSetup(
165
+ instance,
166
+ instanceReader,
167
+ policyInfo,
168
+ instanceReader.getProductSetupInfo(productNftId)
169
+ );
170
+
171
+ StateId newPolicyState = UNDERWRITTEN();
172
+
173
+ // optional activation of policy
174
+ if(activateAt > zeroTimestamp()) {
175
+ newPolicyState = ACTIVE();
176
+ policyInfo.activatedAt = activateAt;
177
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
178
+ }
179
+
180
+ // lock bundle collateral
181
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
182
+
183
+ // optional collection of premium
184
+ if(requirePremiumPayment) {
185
+ netPremiumAmount = _processPremiumByTreasury(
186
+ instance,
187
+ productNftId,
188
+ applicationNftId,
189
+ policyInfo.premiumAmount);
190
+
191
+ policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
192
+ }
193
+
194
+ // lock collateral and update bundle book keeping
195
+ // TODO introduct indirection via pool service?
196
+ // well pool would only need to be involved when a part of the collateral
197
+ // is provided by a "re insurance policy" of the pool
198
+ // but then again the policiy would likely best be attached to the bundle. really? why?
199
+ // retention level: fraction of sum insured that product will cover from pool funds directly
200
+ // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
201
+ // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
202
+ // open points:
203
+ // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
204
+ // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
205
+ bundleInfo = _bundleService.lockCollateral(
206
+ instance,
207
+ applicationNftId,
208
+ bundleNftId,
209
+ collateralAmount,
210
+ netPremiumAmount);
211
+
212
+ instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
213
+
214
+ // also verify/confirm application by pool if necessary
215
+ if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
216
+ IPoolComponent pool = IPoolComponent(
217
+ getRegistry().getObjectInfo(poolNftId).objectAddress);
218
+
219
+ pool.verifyApplication(
220
+ applicationNftId,
221
+ policyInfo.applicationData,
222
+ bundleNftId,
223
+ bundleInfo.filter,
224
+ collateralAmount);
225
+ }
226
+
227
+ // TODO: add logging
228
+ }
229
+
230
+
231
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
232
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
233
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
234
+ return collateralUFixed.toInt();
235
+ }
236
+
237
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
238
+ // check caller is registered product
239
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
240
+ InstanceReader instanceReader = instance.getInstanceReader();
241
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
242
+
243
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
244
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
245
+ }
246
+
247
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
248
+
249
+ uint256 netPremiumAmount = _processPremiumByTreasury(
250
+ instance,
251
+ productInfo.nftId,
252
+ policyNftId,
253
+ unpaidPremiumAmount);
254
+
255
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
256
+
257
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
258
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
259
+
260
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
261
+ activate(policyNftId, activateAt);
262
+ }
263
+
264
+ // TODO: add logging
265
+ }
266
+
267
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
268
+ // check caller is registered product
269
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
270
+ InstanceReader instanceReader = instance.getInstanceReader();
271
+
272
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
273
+
274
+ require(
275
+ policyInfo.activatedAt.eqz(),
276
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
277
+
278
+ policyInfo.activatedAt = activateAt;
279
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
280
+
281
+ instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
282
+
283
+ // TODO: add logging
284
+ }
285
+
286
+
287
+ function expire(
288
+ NftId policyNftId
289
+ )
290
+ external
291
+ override
292
+ // solhint-disable-next-line no-empty-blocks
293
+ {
294
+
295
+ }
296
+
297
+ function close(
298
+ NftId policyNftId
299
+ )
300
+ external
301
+ override
302
+ {
303
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
304
+ InstanceReader instanceReader = instance.getInstanceReader();
305
+
306
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
307
+
308
+ if (policyInfo.activatedAt.eqz()) {
309
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
310
+ }
311
+
312
+ StateId state = instanceReader.getPolicyState(policyNftId);
313
+ if (state != ACTIVE()) {
314
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
315
+ }
316
+
317
+ if (policyInfo.closedAt.gtz()) {
318
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
319
+ }
320
+
321
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
322
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
323
+ }
324
+
325
+ if (policyInfo.openClaimsCount > 0) {
326
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
327
+ }
328
+
329
+ if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
330
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
331
+ }
332
+
333
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
334
+
335
+ _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
336
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
337
+ }
338
+
339
+ function _getPoolNftId(
340
+ IInstance instance,
341
+ NftId productNftId
342
+ )
343
+ internal
344
+ view
345
+ returns (NftId poolNftid)
346
+ {
347
+ InstanceReader instanceReader = instance.getInstanceReader();
348
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
349
+ return productSetupInfo.poolNftId;
350
+ }
351
+
352
+
353
+ function _processPremiumByTreasury(
354
+ IInstance instance,
355
+ NftId productNftId,
356
+ NftId policyNftId,
357
+ uint256 premiumAmount
358
+ )
359
+ internal
360
+ returns (uint256 netPremiumAmount)
361
+ {
362
+ // process token transfer(s)
363
+ if(premiumAmount > 0) {
364
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
365
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
366
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
367
+ address policyOwner = getRegistry().ownerOf(policyNftId);
368
+ ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
369
+ address poolWallet = poolSetupInfo.wallet;
370
+ IPolicy.Premium memory premium = _applicationService.calculatePremium(
371
+ productNftId,
372
+ policyInfo.riskId,
373
+ policyInfo.sumInsuredAmount,
374
+ policyInfo.lifetime,
375
+ policyInfo.applicationData,
376
+ policyInfo.bundleNftId,
377
+ policyInfo.referralId
378
+ );
379
+
380
+ // if (FeeLib.feeIsZero(premium.productFeeAmount)) {
381
+ // tokenHandler.transfer(
382
+ // policyOwner,
383
+ // poolWallet,
384
+ // premiumAmount
385
+ // );
386
+ // } else {
387
+ address productWallet = productSetupInfo.wallet;
388
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
389
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
390
+ }
391
+ tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
392
+ tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
393
+ netPremiumAmount = premium.netPremiumAmount;
394
+ // TODO: also move distribution tokens to distribution wallet and call `Distribution.processSale` to update distribution balances
395
+ // }
396
+ // TODO: move pool/bundle related tokens too
397
+
398
+ }
399
+
400
+ // TODO: add logging
401
+ }
402
+ }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PolicyService} from "./PolicyService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {VersionLib} from "../../types/Version.sol";
10
+
11
+ contract PolicyServiceManager is ProxyManager {
12
+
13
+ PolicyService private _policyService;
14
+
15
+ /// @dev initializes proxy manager with product service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ PolicyService svc = new PolicyService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(svc),
25
+ data);
26
+
27
+ _policyService = PolicyService(address(versionable));
28
+
29
+ // Registry registry = Registry(registryAddress);
30
+ // address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
+ // RegistryService registryService = RegistryService(registryServiceAddress);
32
+ // TODO this must have a role or own nft to register service
33
+ //registryService.registerService(_productService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_productService));
40
+
41
+ // implies that after this constructor call only upgrade functionality is available
42
+ // _isDeployed = true;
43
+ }
44
+
45
+ //--- view functions ----------------------------------------------------//
46
+ function getPolicyService()
47
+ external
48
+ view
49
+ returns (PolicyService policyService)
50
+ {
51
+ return _policyService;
52
+ }
53
+
54
+ }
@@ -7,38 +7,39 @@ import {IInstance} from "../../instance/IInstance.sol";
7
7
  import {IBundle} from "../../instance/module/IBundle.sol";
8
8
  import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
9
  import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
10
11
 
11
12
  import {IVersionable} from "../../shared/IVersionable.sol";
12
13
  import {Versionable} from "../../shared/Versionable.sol";
13
14
  import {INftOwnable} from "../../shared/INftOwnable.sol";
14
15
 
15
16
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
16
- import {POOL, BUNDLE} from "../../types/ObjectType.sol";
17
+ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
17
18
  import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
18
19
  import {Fee, FeeLib} from "../../types/Fee.sol";
19
20
  import {Version, VersionLib} from "../../types/Version.sol";
20
- import {KEEP_STATE} from "../../types/StateId.sol";
21
- import {zeroTimestamp} from "../../types/Timestamp.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
22
23
 
23
24
  import {IService} from "../../shared/IService.sol";
24
25
  import {Service} from "../../shared/Service.sol";
25
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
27
+ import {ComponentService} from "../base/ComponentService.sol";
26
28
  import {IPoolService} from "./IPoolService.sol";
27
29
  import {IRegistryService} from "../../registry/IRegistryService.sol";
28
30
  import {InstanceService} from "../InstanceService.sol";
29
31
  import {InstanceReader} from "../InstanceReader.sol";
30
-
32
+ import {IComponent} from "../../components/IComponent.sol";
33
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
31
34
 
32
35
  string constant POOL_SERVICE_NAME = "PoolService";
33
36
 
34
37
  contract PoolService is
35
- ComponentServiceBase,
38
+ ComponentService,
36
39
  IPoolService
37
40
  {
38
41
  using NftIdLib for NftId;
39
42
 
40
- string public constant NAME = "PoolService";
41
-
42
43
  address internal _registryAddress;
43
44
 
44
45
  function _initialize(
@@ -49,25 +50,41 @@ contract PoolService is
49
50
  initializer
50
51
  virtual override
51
52
  {
52
- address initialOwner = address(0);
53
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
54
-
55
- _initializeService(_registryAddress, initialOwner);
56
-
57
- _registerInterface(type(IService).interfaceId);
58
- _registerInterface(type(IPoolService).interfaceId);
53
+ address registryAddress;
54
+ address initialOwner;
55
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
57
+ // owner is PoolServiceManager deployer
58
+ initializeService(registryAddress, owner);
59
+ registerInterface(type(IPoolService).interfaceId);
59
60
  }
60
61
 
61
- function getName() public pure override(Service, IService) returns(string memory name) {
62
- return NAME;
62
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
63
+ return POOL();
63
64
  }
64
65
 
65
- function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
66
- ISetup.PoolSetupInfo memory initialSetup = abi.decode(
67
- initialObjData,
68
- (ISetup.PoolSetupInfo)
69
- );
70
- instance.createPoolSetup(componentNftId, initialSetup);
66
+ function register(address poolAddress)
67
+ external
68
+ returns(NftId poolNftId)
69
+ {
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());
71
88
  }
72
89
 
73
90
  function setFees(
@@ -89,105 +106,4 @@ contract PoolService is
89
106
 
90
107
  instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
91
108
  }
92
-
93
- function createBundle(
94
- address owner,
95
- Fee memory fee,
96
- uint256 stakingAmount,
97
- uint256 lifetime,
98
- bytes calldata filter
99
- )
100
- external
101
- override
102
- returns(NftId bundleNftId)
103
- {
104
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
105
- InstanceReader instanceReader = instance.getInstanceReader();
106
- NftId poolNftId = info.nftId;
107
-
108
- IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
109
- poolNftId,
110
- FeeLib.zeroFee(),
111
- filter,
112
- stakingAmount,
113
- 0,
114
- stakingAmount,
115
- lifetime,
116
- zeroTimestamp(),
117
- zeroTimestamp()
118
- );
119
-
120
- // register bundle with registry
121
- bundleNftId = getRegistryService().registerBundle(
122
- IRegistry.ObjectInfo(
123
- zeroNftId(),
124
- poolNftId,
125
- BUNDLE(),
126
- false, // intercepting property for bundles is defined on pool
127
- address(0),
128
- owner,
129
- abi.encode(bundleInfo)
130
- )
131
- );
132
-
133
- // create bundle info in instance
134
- instance.createBundle(bundleNftId, bundleInfo);
135
-
136
- // TODO add bundle to pool in instance
137
-
138
- // TODO collect capital
139
- // _processStakingByTreasury(
140
- // instanceReader,
141
- // zeroNftId(),
142
- // poolNftId,
143
- // bundleNftId,
144
- // stakingAmount);
145
-
146
- // TODO add logging
147
- }
148
-
149
- function setBundleFee(
150
- NftId bundleNftId,
151
- Fee memory fee
152
- )
153
- external
154
- override
155
- {
156
- (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
157
- InstanceReader instanceReader = instance.getInstanceReader();
158
- NftId poolNftId = info.nftId;
159
-
160
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
161
- require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
162
- require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
163
-
164
- bundleInfo.fee = fee;
165
-
166
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
167
- }
168
-
169
-
170
-
171
- function _processStakingByTreasury(
172
- InstanceReader instanceReader,
173
- NftId productNftId,
174
- NftId poolNftId,
175
- NftId bundleNftId,
176
- uint256 stakingAmount
177
- )
178
- internal
179
- {
180
- // process token transfer(s)
181
- if(stakingAmount > 0) {
182
- TokenHandler tokenHandler = TokenHandler(instanceReader.getTokenHandler(productNftId));
183
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
184
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
185
-
186
- tokenHandler.transfer(
187
- bundleOwner,
188
- poolInfo.wallet,
189
- stakingAmount
190
- );
191
- }
192
- }
193
109
  }