@etherisc/gif-next 0.0.2-da06f3b-803 → 0.0.2-da09ec0-359

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 (368) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +315 -98
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +668 -141
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +241 -60
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +438 -86
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +526 -144
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +257 -144
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +676 -183
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +435 -186
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +267 -1594
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +232 -208
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +393 -2515
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +359 -92
  30. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +424 -236
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +338 -409
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +291 -108
  38. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
  40. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  41. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +197 -169
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +51 -42
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +918 -0
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +526 -340
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +340 -93
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1376 -0
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +982 -198
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +430 -87
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +493 -0
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +290 -270
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +527 -128
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +181 -296
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +705 -122
  88. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
  90. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -160
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +449 -395
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +349 -114
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1018 -202
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +360 -89
  100. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
  102. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +231 -223
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -95
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +15 -2
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +70 -193
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +28 -15
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +182 -232
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -94
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +128 -37
  128. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -29
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +71 -160
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +100 -33
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -76
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +115 -58
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +172 -160
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +115 -58
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  169. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestService.sol/TestService.json +190 -210
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  194. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  216. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  217. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  219. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  220. package/contracts/components/Component.sol +134 -78
  221. package/contracts/components/Distribution.sol +189 -57
  222. package/contracts/components/IComponent.sol +62 -15
  223. package/contracts/components/IDistributionComponent.sol +39 -15
  224. package/contracts/components/IPoolComponent.sol +86 -23
  225. package/contracts/components/IProductComponent.sol +8 -6
  226. package/contracts/components/Pool.sol +230 -136
  227. package/contracts/components/Product.sol +227 -118
  228. package/contracts/instance/BundleManager.sol +10 -9
  229. package/contracts/instance/Cloneable.sol +7 -2
  230. package/contracts/instance/IInstance.sol +40 -35
  231. package/contracts/instance/IInstanceService.sol +44 -13
  232. package/contracts/instance/Instance.sol +131 -171
  233. package/contracts/instance/InstanceAccessManager.sol +281 -154
  234. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  235. package/contracts/instance/InstanceReader.sol +90 -15
  236. package/contracts/instance/InstanceService.sol +173 -338
  237. package/contracts/instance/InstanceServiceManager.sol +1 -1
  238. package/contracts/instance/InstanceStore.sol +212 -0
  239. package/contracts/instance/ObjectManager.sol +6 -8
  240. package/contracts/instance/base/ComponentService.sol +53 -39
  241. package/contracts/instance/base/KeyValueStore.sol +13 -36
  242. package/contracts/instance/base/Lifecycle.sol +26 -6
  243. package/contracts/instance/module/IAccess.sol +18 -12
  244. package/contracts/instance/module/IBundle.sol +8 -5
  245. package/contracts/instance/module/IComponents.sol +41 -0
  246. package/contracts/instance/module/IDistribution.sol +3 -0
  247. package/contracts/instance/module/IPolicy.sol +43 -11
  248. package/contracts/instance/module/ISetup.sol +7 -20
  249. package/contracts/instance/service/ApplicationService.sol +186 -0
  250. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  251. package/contracts/instance/service/BundleService.sol +225 -136
  252. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  253. package/contracts/instance/service/ClaimService.sol +437 -0
  254. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  255. package/contracts/instance/service/DistributionService.sol +264 -22
  256. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  257. package/contracts/instance/service/IApplicationService.sol +62 -0
  258. package/contracts/instance/service/IBundleService.sol +96 -22
  259. package/contracts/instance/service/IClaimService.sol +90 -0
  260. package/contracts/instance/service/IDistributionService.sol +76 -1
  261. package/contracts/instance/service/IPolicyService.sol +40 -54
  262. package/contracts/instance/service/IPoolService.sol +97 -3
  263. package/contracts/instance/service/IPricingService.sol +37 -0
  264. package/contracts/instance/service/PolicyService.sol +200 -362
  265. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  266. package/contracts/instance/service/PoolService.sol +313 -20
  267. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  268. package/contracts/instance/service/PricingService.sol +275 -0
  269. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  270. package/contracts/instance/service/ProductService.sol +41 -64
  271. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  272. package/contracts/registry/ChainNft.sol +8 -0
  273. package/contracts/registry/IRegistry.sol +3 -2
  274. package/contracts/registry/IRegistryService.sol +12 -11
  275. package/contracts/registry/ITransferInterceptor.sol +1 -0
  276. package/contracts/registry/Registry.sol +30 -20
  277. package/contracts/registry/RegistryService.sol +75 -51
  278. package/contracts/registry/RegistryServiceManager.sol +13 -13
  279. package/contracts/registry/ReleaseManager.sol +32 -40
  280. package/contracts/registry/TokenRegistry.sol +16 -12
  281. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  282. package/contracts/shared/ERC165.sol +14 -12
  283. package/contracts/shared/INftOwnable.sol +11 -10
  284. package/contracts/shared/IPolicyHolder.sol +40 -0
  285. package/contracts/shared/IRegisterable.sol +3 -3
  286. package/contracts/shared/IRegistryLinked.sol +11 -0
  287. package/contracts/shared/IService.sol +6 -4
  288. package/contracts/shared/IVersionable.sol +4 -47
  289. package/contracts/shared/NftOwnable.sol +64 -85
  290. package/contracts/shared/PolicyHolder.sol +94 -0
  291. package/contracts/shared/ProxyManager.sol +100 -25
  292. package/contracts/shared/Registerable.sol +16 -27
  293. package/contracts/shared/RegistryLinked.sol +43 -0
  294. package/contracts/shared/Service.sol +32 -20
  295. package/contracts/shared/TokenHandler.sol +14 -6
  296. package/contracts/shared/Versionable.sol +4 -92
  297. package/contracts/test/TestRegisterable.sol +1 -1
  298. package/contracts/test/TestService.sol +1 -1
  299. package/contracts/types/Amount.sol +109 -0
  300. package/contracts/types/Blocknumber.sol +1 -0
  301. package/contracts/types/ClaimId.sol +75 -0
  302. package/contracts/types/DistributorType.sol +2 -2
  303. package/contracts/types/Fee.sol +17 -8
  304. package/contracts/types/NftId.sol +8 -0
  305. package/contracts/types/ObjectType.sol +16 -7
  306. package/contracts/types/PayoutId.sol +82 -0
  307. package/contracts/types/Referral.sol +4 -0
  308. package/contracts/types/RoleId.sol +12 -8
  309. package/contracts/types/Seconds.sol +54 -0
  310. package/contracts/types/StateId.sol +7 -2
  311. package/contracts/types/Timestamp.sol +18 -13
  312. package/contracts/types/UFixed.sol +1 -0
  313. package/contracts/types/Version.sol +1 -0
  314. package/package.json +1 -1
  315. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  317. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  319. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  321. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  323. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  325. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  327. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  329. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  331. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  333. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  335. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  338. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  340. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  342. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  344. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  346. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  348. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  350. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  352. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  354. package/contracts/experiment/cloning/Cloner.sol +0 -47
  355. package/contracts/experiment/errors/Require.sol +0 -38
  356. package/contracts/experiment/errors/Revert.sol +0 -44
  357. package/contracts/experiment/inheritance/A.sol +0 -53
  358. package/contracts/experiment/inheritance/B.sol +0 -28
  359. package/contracts/experiment/inheritance/C.sol +0 -34
  360. package/contracts/experiment/inheritance/IA.sol +0 -13
  361. package/contracts/experiment/inheritance/IB.sol +0 -10
  362. package/contracts/experiment/inheritance/IC.sol +0 -12
  363. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  364. package/contracts/experiment/statemachine/ISM.sol +0 -25
  365. package/contracts/experiment/statemachine/SM.sol +0 -57
  366. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  367. package/contracts/experiment/types/TypeA.sol +0 -47
  368. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -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 ----------------------------------------------------//
@@ -6,25 +6,30 @@ import {IRegistry} from "../../registry/IRegistry.sol";
6
6
  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
- import {ISetup} from "../module/ISetup.sol";
9
+ import {IComponents} from "../module/IComponents.sol";
10
10
  import {IPolicy} from "../module/IPolicy.sol";
11
11
 
12
12
  import {IVersionable} from "../../shared/IVersionable.sol";
13
13
  import {Versionable} from "../../shared/Versionable.sol";
14
14
  import {INftOwnable} from "../../shared/INftOwnable.sol";
15
15
 
16
+ import {Amount, AmountLib} from "../../types/Amount.sol";
17
+ import {Fee, FeeLib} from "../../types/Fee.sol";
16
18
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
19
  import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
18
- import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
20
+ import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../../types/RoleId.sol";
19
21
  import {Fee, FeeLib} from "../../types/Fee.sol";
20
22
  import {Version, VersionLib} from "../../types/Version.sol";
21
23
  import {KEEP_STATE, StateId} from "../../types/StateId.sol";
24
+ import {Seconds} from "../../types/Seconds.sol";
22
25
  import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
+ import {Version, VersionLib} from "../../types/Version.sol";
23
27
 
24
28
  import {IService} from "../../shared/IService.sol";
25
29
  import {Service} from "../../shared/Service.sol";
26
30
  import {BundleManager} from "../BundleManager.sol";
27
31
  import {ComponentService} from "../base/ComponentService.sol";
32
+ import {IBundleService} from "./IBundleService.sol";
28
33
  import {IPoolService} from "./IPoolService.sol";
29
34
  import {IRegistryService} from "../../registry/IRegistryService.sol";
30
35
  import {InstanceService} from "../InstanceService.sol";
@@ -39,8 +44,9 @@ contract PoolService is
39
44
  IPoolService
40
45
  {
41
46
  using NftIdLib for NftId;
47
+ using AmountLib for Amount;
42
48
 
43
- address internal _registryAddress;
49
+ IBundleService internal _bundleService;
44
50
 
45
51
  function _initialize(
46
52
  address owner,
@@ -55,12 +61,14 @@ contract PoolService is
55
61
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
62
  // TODO while PoolService is not deployed in PoolServiceManager constructor
57
63
  // owner is PoolServiceManager deployer
58
- _initializeService(registryAddress, owner);
64
+ initializeService(registryAddress, address(0), owner);
65
+
66
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
59
67
 
60
- _registerInterface(type(IPoolService).interfaceId);
68
+ registerInterface(type(IPoolService).interfaceId);
61
69
  }
62
70
 
63
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
71
+ function getDomain() public pure override returns(ObjectType) {
64
72
  return POOL();
65
73
  }
66
74
 
@@ -79,32 +87,317 @@ contract PoolService is
79
87
  POOL_OWNER_ROLE());
80
88
 
81
89
  IPoolComponent pool = IPoolComponent(poolAddress);
82
- IRegistry.ObjectInfo memory poolInfo = getRegistryService().registerPool(pool, owner);
90
+ IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
83
91
  pool.linkToRegisteredNftId();
84
- poolNftId = poolInfo.nftId;
92
+ poolNftId = registryInfo.nftId;
93
+
94
+ // amend component info with pool specific token handler
95
+ IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
96
+ componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
97
+
98
+ // save amended component info with instance
99
+ instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
100
+
101
+ bytes4[][] memory selectors = new bytes4[][](2);
102
+ selectors[0] = new bytes4[](1);
103
+ selectors[1] = new bytes4[](1);
104
+
105
+ selectors[0][0] = IPoolComponent.setFees.selector;
106
+ selectors[1][0] = IPoolComponent.verifyApplication.selector;
107
+
108
+ RoleId[] memory roles = new RoleId[](2);
109
+ roles[0] = POOL_OWNER_ROLE();
110
+ roles[1] = POLICY_SERVICE_ROLE();
111
+
112
+ getInstanceService().createGifTarget(
113
+ instanceNftId,
114
+ poolAddress,
115
+ pool.getName(),
116
+ selectors,
117
+ roles);
118
+ }
119
+
120
+
121
+ function setMaxCapitalAmount(Amount maxCapitalAmount)
122
+ external
123
+ virtual
124
+ {
125
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
126
+ InstanceReader instanceReader = instance.getInstanceReader();
127
+
128
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
129
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
130
+ Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
131
+
132
+ poolInfo.maxCapitalAmount = maxCapitalAmount;
133
+ componentInfo.data = abi.encode(poolInfo);
134
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
135
+
136
+ emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
137
+ }
138
+
139
+ function setBundleOwnerRole(RoleId bundleOwnerRole)
140
+ external
141
+ virtual
142
+ {
143
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
144
+ InstanceReader instanceReader = instance.getInstanceReader();
145
+
146
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
147
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
85
148
 
86
- instance.createPoolSetup(poolNftId, pool.getSetupInfo());
87
- getInstanceService().createGifTarget(instanceNftId, poolAddress, pool.getName());
88
- getInstanceService().grantPoolDefaultPermissions(instanceNftId, poolAddress, pool.getName());
149
+ // bundle owner role may only be set once per pool
150
+ if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
151
+ revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
152
+ }
153
+
154
+ poolInfo.bundleOwnerRole = bundleOwnerRole;
155
+ componentInfo.data = abi.encode(poolInfo);
156
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
157
+
158
+ emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
89
159
  }
90
160
 
161
+
91
162
  function setFees(
92
163
  Fee memory poolFee,
93
164
  Fee memory stakingFee,
94
165
  Fee memory performanceFee
95
166
  )
96
167
  external
97
- override
168
+ virtual
169
+ {
170
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
171
+ InstanceReader instanceReader = instance.getInstanceReader();
172
+
173
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
174
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
175
+
176
+ poolInfo.poolFee = poolFee;
177
+ poolInfo.stakingFee = stakingFee;
178
+ poolInfo.performanceFee = performanceFee;
179
+ componentInfo.data = abi.encode(poolInfo);
180
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
181
+
182
+ // TODO add logging
183
+ }
184
+
185
+
186
+ function createBundle(
187
+ address owner, // initial bundle owner
188
+ Fee memory fee, // fees deducted from premium that go to bundle owner
189
+ Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
190
+ Seconds lifetime, // initial duration for which new policies are covered
191
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
192
+ )
193
+ external
194
+ virtual
195
+ returns(NftId bundleNftId)
98
196
  {
99
- (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
197
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
100
198
  InstanceReader instanceReader = instance.getInstanceReader();
101
- NftId poolNftId = poolInfo.nftId;
102
199
 
103
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
104
- poolSetupInfo.poolFee = poolFee;
105
- poolSetupInfo.stakingFee = stakingFee;
106
- poolSetupInfo.performanceFee = performanceFee;
200
+ // pool fee book keeping
201
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
202
+ Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
203
+
204
+ bundleNftId = _bundleService.create(
205
+ instance,
206
+ poolNftId,
207
+ owner,
208
+ fee,
209
+ stakingNetAmount,
210
+ lifetime,
211
+ filter);
212
+
213
+ // collect tokens from bundle owner
214
+ _transferStakingAmount(componentInfo, owner, stakingAmount);
215
+
216
+ emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
217
+ }
218
+
219
+
220
+ function closeBundle(NftId bundleNftId)
221
+ external
222
+ virtual
223
+ {
224
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
225
+
226
+ // TODO book keeping for pool collateral released outside of retention level
227
+
228
+ // releasing collateral in bundle
229
+ _bundleService.close(instance, bundleNftId);
230
+
231
+ // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
232
+
233
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
234
+ }
235
+
236
+ function processSale(
237
+ NftId bundleNftId,
238
+ IPolicy.Premium memory premium,
239
+ Amount actualAmountTransferred
240
+ )
241
+ external
242
+ virtual
243
+ {
244
+ IRegistry registry = getRegistry();
245
+ IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
246
+ IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
247
+ IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
248
+ IInstance instance = IInstance(instanceObjectInfo.objectAddress);
249
+
250
+ Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
251
+ Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
252
+ Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
253
+ if (!(actualAmountTransferred == expectedTransferAmount)) {
254
+ revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
255
+ }
107
256
 
108
- instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
257
+ // update pool fee balance
258
+ if (poolFeeAmount.gtz()) {
259
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
260
+ poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
261
+ instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
262
+ }
263
+
264
+ if (bundleFeeAmount.gtz()) {
265
+ _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
266
+ }
267
+ }
268
+
269
+ function lockCollateral(
270
+ IInstance instance,
271
+ NftId productNftId,
272
+ NftId applicationNftId,
273
+ IPolicy.PolicyInfo memory applicationInfo,
274
+ Amount premiumAmount // premium amount after product and distribution fees
275
+ )
276
+ external
277
+ virtual
278
+ // TODO add restricted and granting for policy service
279
+ {
280
+ InstanceReader instanceReader = instance.getInstanceReader();
281
+ NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
282
+ NftId bundleNftId = applicationInfo.bundleNftId;
283
+
284
+ // TODO move this check to application creation and don't repeat this here
285
+ // ensure that pool for bundle from application matches with pool for product of application
286
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
287
+ if(bundleInfo.poolNftId != poolNftId) {
288
+ revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
289
+ }
290
+
291
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
292
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
293
+
294
+ // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
295
+ Amount collateralAmount = applicationInfo.sumInsuredAmount;
296
+
297
+ // TODO add correct net premium calculation (pool fee might be > 0)
298
+ Amount premiumAfterPoolFeeAmount = premiumAmount;
299
+
300
+ // lock collateral amount from involvedd bundle
301
+ _bundleService.lockCollateral(
302
+ instance,
303
+ applicationNftId,
304
+ bundleNftId,
305
+ collateralAmount,
306
+ premiumAfterPoolFeeAmount);
307
+
308
+ // also verify/confirm application by pool if necessary
309
+ if(poolInfo.isVerifyingApplications) {
310
+ address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
311
+ IPoolComponent(poolAddress).verifyApplication(
312
+ applicationNftId,
313
+ applicationInfo.applicationData,
314
+ bundleNftId,
315
+ bundleInfo.filter,
316
+ collateralAmount);
317
+ }
318
+ }
319
+
320
+
321
+ function reduceCollateral(
322
+ IInstance instance,
323
+ NftId policyNftId,
324
+ IPolicy.PolicyInfo memory policyInfo,
325
+ Amount payoutAmount
326
+ )
327
+ external
328
+ virtual
329
+ // TODO add restricted and granting for claim service
330
+ {
331
+ _bundleService.releaseCollateral(
332
+ instance,
333
+ policyNftId,
334
+ policyInfo.bundleNftId,
335
+ payoutAmount);
109
336
  }
110
- }
337
+
338
+
339
+ /// @dev releases the remaining collateral linked to the specified policy
340
+ /// may only be called by the policy service for unlocked pool components
341
+ function releaseCollateral(
342
+ IInstance instance,
343
+ NftId policyNftId,
344
+ IPolicy.PolicyInfo memory policyInfo
345
+ )
346
+ external
347
+ virtual
348
+ // TODO add restricted and granting for policy service
349
+ {
350
+ _bundleService.releaseCollateral(
351
+ instance,
352
+ policyNftId,
353
+ policyInfo.bundleNftId,
354
+ policyInfo.sumInsuredAmount - policyInfo.claimAmount);
355
+
356
+ _bundleService.unlinkPolicy(
357
+ instance,
358
+ policyNftId);
359
+ }
360
+
361
+
362
+ function _processStakingFees(
363
+ IComponents.ComponentInfo memory componentInfo,
364
+ Amount stakingAmount
365
+ )
366
+ internal
367
+ returns (Amount stakingNetAmount)
368
+ {
369
+ stakingNetAmount = stakingAmount;
370
+
371
+ // check if any staking fees apply
372
+ Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
373
+ if (FeeLib.gtz(stakingFee)) {
374
+ (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
375
+ stakingNetAmount = netAmount;
376
+
377
+ // TODO update fee balance for pool
378
+ }
379
+ }
380
+
381
+
382
+ // TODO create (I)TreasuryService that deals with all gif related token transfers
383
+ /// @dev transfers the specified amount from the bundle owner to the pool's wallet
384
+ function _transferStakingAmount(
385
+ IComponents.ComponentInfo memory componentInfo,
386
+ address bundleOwner,
387
+ Amount stakingAmount
388
+ )
389
+ internal
390
+ {
391
+ TokenHandler tokenHandler = componentInfo.tokenHandler;
392
+ address poolWallet = componentInfo.wallet;
393
+
394
+ if(stakingAmount.gtz()) {
395
+ tokenHandler.transfer(
396
+ bundleOwner,
397
+ poolWallet,
398
+ stakingAmount
399
+ );
400
+ }
401
+ }
402
+
403
+ }
@@ -16,7 +16,7 @@ contract PoolServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PoolService poolSrv = new PoolService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -0,0 +1,275 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Seconds} from "../../types/Seconds.sol";
5
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
6
+ import {ObjectType} from "../../types/ObjectType.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {Fee} from "../../types/Fee.sol";
9
+ import {ReferralId} from "../../types/Referral.sol";
10
+ import {RiskId} from "../../types/RiskId.sol";
11
+ import {PRODUCT, DISTRIBUTION, PRICE} from "../../types/ObjectType.sol";
12
+ import {Amount} from "../../types/Amount.sol";
13
+ import {IRegistry} from "../../registry/IRegistry.sol";
14
+
15
+ import {IProductComponent} from "../../components/IProductComponent.sol";
16
+
17
+ import {IInstance} from "../IInstance.sol";
18
+ import {InstanceReader} from "../InstanceReader.sol";
19
+ import {IComponents} from "../module/IComponents.sol";
20
+ import {IPolicy} from "../module/IPolicy.sol";
21
+ import {IBundle} from "../module/IBundle.sol";
22
+ import {ISetup} from "../module/ISetup.sol";
23
+ import {IDistribution} from "../module/IDistribution.sol";
24
+
25
+ import {ComponentService} from "../base/ComponentService.sol";
26
+
27
+ import {IPricingService} from "./IPricingService.sol";
28
+ import {IDistributionService} from "./IDistributionService.sol";
29
+
30
+
31
+ contract PricingService is
32
+ ComponentService,
33
+ IPricingService
34
+ {
35
+ using UFixedLib for UFixed;
36
+
37
+ IDistributionService internal _distributionService;
38
+
39
+
40
+ function _initialize(
41
+ address owner,
42
+ bytes memory data
43
+ )
44
+ internal
45
+ virtual override
46
+ initializer()
47
+ {
48
+ // TODO check this, might no longer be the way, refactor if necessary
49
+ address registryAddress;
50
+ address initialOwner;
51
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
52
+
53
+ initializeService(registryAddress, address(0), owner);
54
+ registerInterface(type(IPricingService).interfaceId);
55
+
56
+ _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
57
+ }
58
+
59
+
60
+ function getDomain() public pure override returns(ObjectType) {
61
+ return PRICE();
62
+ }
63
+
64
+ /// @dev calculates the premium amount for the specified attributes
65
+ /// also returns the various fee components involved with creating a policy
66
+ function calculatePremium(
67
+ NftId productNftId,
68
+ RiskId riskId,
69
+ Amount sumInsuredAmount,
70
+ Seconds lifetime,
71
+ bytes memory applicationData,
72
+ NftId bundleNftId,
73
+ ReferralId referralId
74
+ )
75
+ external
76
+ view
77
+ virtual override
78
+ returns (
79
+ IPolicy.Premium memory premium
80
+ )
81
+ {
82
+ InstanceReader reader;
83
+ Amount netPremiumAmount;
84
+
85
+ {
86
+ // verify product
87
+ (
88
+ IRegistry.ObjectInfo memory productInfo,
89
+ IInstance instance
90
+ ) = _getAndVerifyComponentInfoAndInstance(productNftId, PRODUCT());
91
+
92
+ reader = instance.getInstanceReader();
93
+
94
+ // calculate net premium
95
+ netPremiumAmount = IProductComponent(productInfo.objectAddress).calculateNetPremium(
96
+ sumInsuredAmount,
97
+ riskId,
98
+ lifetime,
99
+ applicationData
100
+ );
101
+ }
102
+
103
+ {
104
+ // get configurations for all involed objects
105
+ ISetup.ProductSetupInfo memory productSetup = reader.getProductSetupInfo(productNftId);
106
+
107
+ bytes memory componentData = reader.getComponentInfo(productSetup.poolNftId).data;
108
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentData, (IComponents.PoolInfo));
109
+
110
+ IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
111
+ if(bundleInfo.poolNftId != productSetup.poolNftId) {
112
+ revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productSetup.poolNftId);
113
+ }
114
+
115
+ NftId distributionNftId = productSetup.distributionNftId;
116
+ ISetup.DistributionSetupInfo memory distSetup = reader.getDistributionSetupInfo(distributionNftId);
117
+
118
+ // calculate premium, order is important
119
+ premium = _getFixedFeeAmounts(
120
+ netPremiumAmount,
121
+ productSetup,
122
+ poolInfo,
123
+ distSetup,
124
+ bundleInfo
125
+ );
126
+
127
+ premium = _calculateVariableFeeAmounts(
128
+ premium,
129
+ productSetup,
130
+ poolInfo,
131
+ distSetup,
132
+ bundleInfo
133
+ );
134
+
135
+ premium = _calculateDistributionOwnerFeeAmount(
136
+ premium,
137
+ distSetup,
138
+ referralId,
139
+ distributionNftId,
140
+ reader
141
+ );
142
+
143
+ // sanity check to validate the fee calculation
144
+ if (premium.distributionOwnerFeeFixAmount < distSetup.minDistributionOwnerFee.fixedFee) {
145
+ revert ErrorIPricingServiceFeeCalculationMismatch(
146
+ premium.distributionFeeFixAmount,
147
+ premium.distributionFeeVarAmount,
148
+ premium.distributionOwnerFeeFixAmount,
149
+ premium.distributionOwnerFeeVarAmount,
150
+ premium.commissionAmount,
151
+ premium.discountAmount
152
+ );
153
+ }
154
+
155
+ if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
156
+ revert ErrorIPricingServiceFeeCalculationMismatch(
157
+ premium.distributionFeeFixAmount,
158
+ premium.distributionFeeVarAmount,
159
+ premium.distributionOwnerFeeFixAmount,
160
+ premium.distributionOwnerFeeVarAmount,
161
+ premium.commissionAmount,
162
+ premium.discountAmount
163
+ );
164
+ }
165
+ }
166
+ }
167
+
168
+ // internal functions
169
+ function _getFixedFeeAmounts(
170
+ Amount netPremiumAmount,
171
+ ISetup.ProductSetupInfo memory productInfo,
172
+ IComponents.PoolInfo memory poolInfo,
173
+ ISetup.DistributionSetupInfo memory distInfo,
174
+ IBundle.BundleInfo memory bundleInfo
175
+ )
176
+ internal
177
+ view
178
+ returns (
179
+ IPolicy.Premium memory premium
180
+ )
181
+ {
182
+ // initial premium amount is the net premium
183
+ premium.netPremiumAmount = netPremiumAmount.toInt();
184
+ premium.fullPremiumAmount = netPremiumAmount.toInt();
185
+
186
+ uint256 t = productInfo.productFee.fixedFee;
187
+ premium.productFeeFixAmount = t;
188
+ premium.fullPremiumAmount += t;
189
+
190
+ t = poolInfo.poolFee.fixedFee;
191
+ premium.poolFeeFixAmount = t;
192
+ premium.fullPremiumAmount += t;
193
+
194
+ t = bundleInfo.fee.fixedFee;
195
+ premium.bundleFeeFixAmount = t;
196
+ premium.fullPremiumAmount += t;
197
+
198
+ t = distInfo.distributionFee.fixedFee;
199
+ premium.distributionFeeFixAmount = t;
200
+ premium.fullPremiumAmount += t;
201
+ }
202
+
203
+ function _calculateVariableFeeAmounts(
204
+ IPolicy.Premium memory premium,
205
+ ISetup.ProductSetupInfo memory productInfo,
206
+ IComponents.PoolInfo memory poolInfo,
207
+ ISetup.DistributionSetupInfo memory distInfo,
208
+ IBundle.BundleInfo memory bundleInfo
209
+ )
210
+ internal
211
+ view
212
+ returns (
213
+ IPolicy.Premium memory intermadiatePremium
214
+ )
215
+ {
216
+ UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
217
+
218
+ uint256 t = (netPremiumAmount * productInfo.productFee.fractionalFee).toInt();
219
+ premium.productFeeVarAmount = t;
220
+ premium.fullPremiumAmount += t;
221
+
222
+ t = (netPremiumAmount * poolInfo.poolFee.fractionalFee).toInt();
223
+ premium.poolFeeVarAmount = t;
224
+ premium.fullPremiumAmount += t;
225
+
226
+ t = (netPremiumAmount * bundleInfo.fee.fractionalFee).toInt();
227
+ premium.bundleFeeVarAmount = t;
228
+ premium.fullPremiumAmount += t;
229
+
230
+ t = (netPremiumAmount * distInfo.distributionFee.fractionalFee).toInt();
231
+ premium.distributionFeeVarAmount = t;
232
+ premium.fullPremiumAmount += t;
233
+
234
+ return premium;
235
+ }
236
+
237
+ function _calculateDistributionOwnerFeeAmount(
238
+ IPolicy.Premium memory premium,
239
+ ISetup.DistributionSetupInfo memory distInfo,
240
+ ReferralId referralId,
241
+ NftId distributionNftId,
242
+ InstanceReader reader
243
+ )
244
+ internal
245
+ view
246
+ returns (IPolicy.Premium memory finalPremium)
247
+ {
248
+ // if the referral is not valid, then the distribution owner gets everything
249
+ if (! _distributionService.referralIsValid(distributionNftId, referralId)) {
250
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
251
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
252
+ premium.premiumAmount = premium.fullPremiumAmount;
253
+ return premium;
254
+ }
255
+
256
+ Fee memory minDistributionOwnerFee = distInfo.minDistributionOwnerFee;
257
+
258
+ // if the referral is valid, the the commission and discount are calculated based in the full premium
259
+ // the remaing amount goes to the distribution owner
260
+ {
261
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
262
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
263
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
264
+
265
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
266
+ premium.commissionAmount = commissionAmount;
267
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
268
+ premium.distributionOwnerFeeFixAmount = distInfo.minDistributionOwnerFee.fixedFee;
269
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount - commissionAmount - premium.discountAmount;
270
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
271
+ }
272
+
273
+ return premium;
274
+ }
275
+ }