@etherisc/gif-next 0.0.2-b38343e-249 → 0.0.2-b44ae3c-205

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 (348) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +115 -95
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +182 -195
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +190 -67
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +207 -150
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +389 -181
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +213 -158
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +334 -249
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +135 -183
  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 +306 -2137
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +193 -75
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +432 -2883
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
  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 +425 -242
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +231 -287
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -75
  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 +123 -33
  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 +56 -73
  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 +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +186 -126
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -38
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +443 -240
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -39
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +722 -81
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +147 -32
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +732 -111
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +147 -44
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +126 -95
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +300 -187
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +395 -50
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +424 -64
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +212 -133
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +787 -46
  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 +95 -26
  92. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +387 -215
  94. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +84 -61
  96. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +958 -52
  98. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +96 -37
  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 +152 -54
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +28 -37
  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 +19 -0
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -26
  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 +31 -12
  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 +23 -39
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
  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 +10 -23
  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/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IService.sol/IService.json +95 -26
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +7 -20
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  153. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  154. package/artifacts/contracts/shared/Service.sol/Service.json +102 -28
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +7 -20
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  166. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestService.sol/TestService.json +117 -39
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  173. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  176. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  203. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  213. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  217. package/contracts/components/Component.sol +115 -85
  218. package/contracts/components/Distribution.sol +27 -50
  219. package/contracts/components/IComponent.sol +52 -17
  220. package/contracts/components/IDistributionComponent.sol +1 -30
  221. package/contracts/components/IPoolComponent.sol +75 -48
  222. package/contracts/components/IProductComponent.sol +8 -6
  223. package/contracts/components/Pool.sol +178 -130
  224. package/contracts/components/Product.sol +164 -74
  225. package/contracts/instance/BundleManager.sol +10 -9
  226. package/contracts/instance/Cloneable.sol +7 -2
  227. package/contracts/instance/IInstance.sol +40 -55
  228. package/contracts/instance/IInstanceService.sol +28 -14
  229. package/contracts/instance/Instance.sol +123 -185
  230. package/contracts/instance/InstanceAccessManager.sol +404 -160
  231. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  232. package/contracts/instance/InstanceReader.sol +90 -15
  233. package/contracts/instance/InstanceService.sol +173 -341
  234. package/contracts/instance/InstanceStore.sol +212 -0
  235. package/contracts/instance/ObjectManager.sol +6 -8
  236. package/contracts/instance/base/ComponentService.sol +53 -39
  237. package/contracts/instance/base/KeyValueStore.sol +13 -36
  238. package/contracts/instance/base/Lifecycle.sol +26 -6
  239. package/contracts/instance/module/IAccess.sol +21 -14
  240. package/contracts/instance/module/IBundle.sol +8 -5
  241. package/contracts/instance/module/IComponents.sol +41 -0
  242. package/contracts/instance/module/IDistribution.sol +3 -0
  243. package/contracts/instance/module/IPolicy.sol +39 -9
  244. package/contracts/instance/module/ISetup.sol +7 -21
  245. package/contracts/instance/service/ApplicationService.sol +68 -150
  246. package/contracts/instance/service/BundleService.sol +223 -139
  247. package/contracts/instance/service/ClaimService.sol +318 -32
  248. package/contracts/instance/service/DistributionService.sol +171 -100
  249. package/contracts/instance/service/IApplicationService.sol +11 -31
  250. package/contracts/instance/service/IBundleService.sol +92 -28
  251. package/contracts/instance/service/IClaimService.sol +52 -23
  252. package/contracts/instance/service/IDistributionService.sol +33 -11
  253. package/contracts/instance/service/IPolicyService.sol +24 -33
  254. package/contracts/instance/service/IPoolService.sol +97 -3
  255. package/contracts/instance/service/IPricingService.sol +37 -0
  256. package/contracts/instance/service/PolicyService.sol +168 -266
  257. package/contracts/instance/service/PoolService.sol +313 -19
  258. package/contracts/instance/service/PricingService.sol +275 -0
  259. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  260. package/contracts/instance/service/ProductService.sol +37 -60
  261. package/contracts/registry/ChainNft.sol +8 -0
  262. package/contracts/registry/IRegistry.sol +2 -0
  263. package/contracts/registry/IRegistryService.sol +2 -3
  264. package/contracts/registry/ITransferInterceptor.sol +1 -0
  265. package/contracts/registry/Registry.sol +23 -20
  266. package/contracts/registry/RegistryService.sol +29 -26
  267. package/contracts/registry/ReleaseManager.sol +20 -18
  268. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  269. package/contracts/shared/IPolicyHolder.sol +23 -9
  270. package/contracts/shared/IRegistryLinked.sol +0 -1
  271. package/contracts/shared/IService.sol +6 -4
  272. package/contracts/shared/NftOwnable.sol +0 -2
  273. package/contracts/shared/PolicyHolder.sol +30 -17
  274. package/contracts/shared/Registerable.sol +12 -11
  275. package/contracts/shared/RegistryLinked.sol +0 -5
  276. package/contracts/shared/Service.sol +21 -7
  277. package/contracts/shared/TokenHandler.sol +14 -6
  278. package/contracts/test/TestService.sol +1 -1
  279. package/contracts/types/Amount.sol +109 -0
  280. package/contracts/types/Blocknumber.sol +1 -0
  281. package/contracts/types/ClaimId.sol +25 -2
  282. package/contracts/types/Fee.sol +17 -8
  283. package/contracts/types/NftId.sol +8 -0
  284. package/contracts/types/ObjectType.sol +10 -5
  285. package/contracts/types/PayoutId.sol +33 -5
  286. package/contracts/types/Referral.sol +4 -0
  287. package/contracts/types/RoleId.sol +13 -6
  288. package/contracts/types/Seconds.sol +54 -0
  289. package/contracts/types/StateId.sol +7 -2
  290. package/contracts/types/Timestamp.sol +18 -13
  291. package/contracts/types/UFixed.sol +1 -0
  292. package/contracts/types/Version.sol +1 -0
  293. package/package.json +1 -1
  294. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  295. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  296. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  297. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  298. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  299. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  300. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  302. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  304. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  306. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  308. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  310. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  312. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  314. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  316. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  318. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  320. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  322. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  324. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  326. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  328. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  330. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  332. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  334. package/contracts/experiment/cloning/Cloner.sol +0 -47
  335. package/contracts/experiment/errors/Require.sol +0 -38
  336. package/contracts/experiment/errors/Revert.sol +0 -44
  337. package/contracts/experiment/inheritance/A.sol +0 -53
  338. package/contracts/experiment/inheritance/B.sol +0 -28
  339. package/contracts/experiment/inheritance/C.sol +0 -34
  340. package/contracts/experiment/inheritance/IA.sol +0 -13
  341. package/contracts/experiment/inheritance/IB.sol +0 -10
  342. package/contracts/experiment/inheritance/IC.sol +0 -12
  343. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  344. package/contracts/experiment/statemachine/ISM.sol +0 -25
  345. package/contracts/experiment/statemachine/SM.sol +0 -57
  346. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  347. package/contracts/experiment/types/TypeA.sol +0 -47
  348. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -8,6 +8,7 @@ import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
8
8
  import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
10
  import {Component} from "./Component.sol";
11
+ import {IDistribution} from "../instance/module/IDistribution.sol";
11
12
  import {IDistributionComponent} from "./IDistributionComponent.sol";
12
13
  import {IRegistry} from "../registry/IRegistry.sol";
13
14
  import {IRegisterable} from "../shared/IRegisterable.sol";
@@ -17,7 +18,7 @@ import {TokenHandler} from "../shared/TokenHandler.sol";
17
18
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
19
  import {UFixed} from "../types/UFixed.sol";
19
20
  import {DistributorType} from "../types/DistributorType.sol";
20
- import {Timestamp} from "../types/Timestamp.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
21
22
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
22
23
 
23
24
 
@@ -29,37 +30,43 @@ abstract contract Distribution is
29
30
  bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
30
31
 
31
32
  struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
32
34
  Fee _distributionFee;
33
35
  TokenHandler _tokenHandler;
34
36
  IDistributionService _distributionService;
35
37
  mapping(address distributor => NftId distributorNftId) _distributorNftId;
36
38
  }
37
39
 
40
+ error ErrorDistributionAlreadyDistributor(address distributor, NftId distributorNftId);
41
+
38
42
  function initializeDistribution(
39
43
  address registry,
40
44
  NftId instanceNftId,
41
45
  string memory name,
42
46
  address token,
47
+ Fee memory minDistributionOwnerFee,
43
48
  Fee memory distributionFee,
44
49
  address initialOwner,
45
- bytes memory data
50
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
46
51
  )
47
52
  public
48
53
  virtual
49
54
  onlyInitializing()
50
55
  {
51
- initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, data);
56
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
52
57
 
53
58
  DistributionStorage storage $ = _getDistributionStorage();
54
59
  // TODO add validation
60
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
55
61
  $._distributionFee = distributionFee;
56
62
  $._tokenHandler = new TokenHandler(token);
57
- $._distributionService = getInstance().getDistributionService();
63
+ $._distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
58
64
 
59
65
  registerInterface(type(IDistributionComponent).interfaceId);
60
66
  }
61
67
 
62
68
  function setFees(
69
+ Fee memory minDistributionOwnerFee,
63
70
  Fee memory distributionFee
64
71
  )
65
72
  external
@@ -67,7 +74,7 @@ abstract contract Distribution is
67
74
  onlyOwner
68
75
  restricted()
69
76
  {
70
- _getDistributionStorage()._distributionService.setFees(distributionFee);
77
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
71
78
  }
72
79
 
73
80
  function getDistributionFee() external view returns (Fee memory distributionFee) {
@@ -111,7 +118,9 @@ abstract contract Distribution is
111
118
  returns(NftId distributorNftId)
112
119
  {
113
120
  DistributionStorage storage $ = _getDistributionStorage();
114
- require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
121
+ if($._distributorNftId[distributor].gtz()) {
122
+ revert ErrorDistributionAlreadyDistributor(distributor, $._distributorNftId[distributor]);
123
+ }
115
124
 
116
125
  distributorNftId = $._distributionService.createDistributor(
117
126
  distributor,
@@ -131,17 +140,18 @@ abstract contract Distribution is
131
140
  // and add it
132
141
  {
133
142
  DistributionStorage storage $ = _getDistributionStorage();
134
- $._distributionService.updateDistributorType(
135
- distributorNftId,
136
- distributorType,
137
- data);
143
+ // TODO re-enable once implemented
144
+ // $._distributionService.updateDistributorType(
145
+ // distributorNftId,
146
+ // distributorType,
147
+ // data);
138
148
  }
139
149
 
140
150
  /**
141
151
  * @dev lets distributors create referral codes.
142
152
  * referral codes need to be unique
143
153
  */
144
- function createReferral(
154
+ function _createReferral(
145
155
  NftId distributorNftId,
146
156
  string memory code,
147
157
  UFixed discountPercentage,
@@ -149,8 +159,7 @@ abstract contract Distribution is
149
159
  Timestamp expiryAt,
150
160
  bytes memory data
151
161
  )
152
- public
153
- // TODO add authz (only active distributor)
162
+ internal
154
163
  returns (ReferralId referralId)
155
164
  {
156
165
  DistributionStorage storage $ = _getDistributionStorage();
@@ -163,22 +172,6 @@ abstract contract Distribution is
163
172
  data);
164
173
  }
165
174
 
166
- function calculateFeeAmount(
167
- ReferralId referralId,
168
- uint256 netPremiumAmount
169
- )
170
- external
171
- view
172
- virtual override
173
- returns (uint256 feeAmount)
174
- {
175
- ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
176
- Fee memory fee = setupInfo.distributionFee;
177
- (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
178
- // TODO: use this?
179
- // return _distributionService.calculateFeeAmount(referralId, premiumAmount);
180
- }
181
-
182
175
  function isDistributor(address candidate)
183
176
  public
184
177
  view
@@ -206,7 +199,7 @@ abstract contract Distribution is
206
199
  )
207
200
  {
208
201
  ReferralId referralId = getReferralId(referralCode);
209
- return getInstanceReader().getDiscountPercentage(referralId);
202
+ return _getInstanceReader().getDiscountPercentage(referralId);
210
203
  }
211
204
 
212
205
 
@@ -235,19 +228,6 @@ abstract contract Distribution is
235
228
  return 0 * netPremiumAmount;
236
229
  }
237
230
 
238
- function processSale(
239
- ReferralId referralId,
240
- uint256 premiumAmount
241
- )
242
- external
243
- onlyOwner
244
- restricted()
245
- virtual override
246
- {
247
- DistributionStorage storage $ = _getDistributionStorage();
248
- $._distributionService.processSale(referralId, premiumAmount);
249
- }
250
-
251
231
  function processRenewal(
252
232
  ReferralId referralId,
253
233
  uint256 feeAmount
@@ -260,11 +240,6 @@ abstract contract Distribution is
260
240
  // default is no action
261
241
  }
262
242
 
263
- function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
264
- // default is invalid
265
- return false;
266
- }
267
-
268
243
  function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
269
244
  InstanceReader reader = getInstance().getInstanceReader();
270
245
  setupInfo = reader.getDistributionSetupInfo(getNftId());
@@ -280,13 +255,15 @@ abstract contract Distribution is
280
255
  return ISetup.DistributionSetupInfo(
281
256
  zeroNftId(),
282
257
  $._tokenHandler,
258
+ $._minDistributionOwnerFee,
283
259
  $._distributionFee,
284
- address(this)
260
+ address(this),
261
+ 0
285
262
  );
286
263
  }
287
264
 
288
265
 
289
- function nftTransferFrom(address from, address to, uint256 tokenId) external virtual override (Component, ITransferInterceptor) {
266
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
290
267
  // keep track of distributor nft owner
291
268
  emit LogDistributorUpdated(to, msg.sender);
292
269
  DistributionStorage storage $ = _getDistributionStorage();
@@ -1,8 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
4
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
6
 
7
+ import {IComponents} from "../instance/module/IComponents.sol";
6
8
  import {IInstance} from "../instance/IInstance.sol";
7
9
  import {IInstanceService} from "../instance/IInstanceService.sol";
8
10
  import {IProductService} from "../instance/service/IProductService.sol";
@@ -10,46 +12,79 @@ import {IRegisterable} from "../shared/IRegisterable.sol";
10
12
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
13
  import {NftId} from "../types/NftId.sol";
12
14
  import {ObjectType} from "../types/ObjectType.sol";
15
+ import {TokenHandler} from "../shared/TokenHandler.sol";
13
16
 
17
+ /// @dev component base class
18
+ /// component examples are product, distribution, pool and oracle
14
19
  interface IComponent is
15
20
  IRegisterable,
16
- ITransferInterceptor
21
+ ITransferInterceptor,
22
+ IAccessManaged
17
23
  {
18
-
19
24
  error ErrorComponentNotChainNft(address caller);
20
25
  error ErrorComponentNotProductService(address caller);
21
- error ErrorComponentNotInstance(NftId instanceNftId, address instance);
26
+ error ErrorComponentNotInstance(NftId instanceNftId);
22
27
  error ErrorComponentProductNftAlreadySet();
28
+
23
29
  error ErrorComponentWalletAddressZero();
24
- error ErrorComponentWalletAddressIsSameAsCurrent(address newWallet);
30
+ error ErrorComponentWalletAddressIsSameAsCurrent();
25
31
  error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
26
- error ErrorComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
27
32
 
28
- event LogComponentWalletAddressChanged(address newWallet);
33
+ error ErrorComponentWalletNotComponent();
34
+
35
+ event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
29
36
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
30
37
 
31
- function getName() external view returns (string memory name);
38
+ event LogComponentTokenHandlerApproved(uint256 limit);
32
39
 
33
- // TODO remove and replace with accessmanaged target locking mechanism
40
+ /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
41
+ /// only component owner (nft holder) is authorizes to call this function
34
42
  function lock() external;
43
+
44
+ /// @dev unlocks component to (re-)enable functions that may change state related to this component
45
+ /// only component owner (nft holder) is authorizes to call this function
35
46
  function unlock() external;
36
47
 
37
- function getToken() external view returns (IERC20Metadata token);
48
+ /// @dev approves token hanlder to spend up to the specified amount of tokens
49
+ /// reverts if component wallet is not component itself
50
+ /// only component owner (nft holder) is authorizes to call this function
51
+ function approveTokenHandler(uint256 spendingLimitAmount) external;
38
52
 
53
+ /// @dev sets the wallet address for the component
54
+ /// if the current wallet has tokens, these will be transferred
55
+ /// if the new wallet address is externally owned, an approval from the
56
+ /// owner of the external wallet for the component to move all tokens must exist
39
57
  function setWallet(address walletAddress) external;
40
- function getWallet() external view returns (address walletAddress);
41
58
 
42
- function isNftInterceptor() external view returns(bool isInterceptor);
59
+ /// @dev only product service may set product nft id during registration of product setup
60
+ function setProductNftId(NftId productNftId) external;
43
61
 
62
+ /// @dev defines the instance to which this component is linked to
44
63
  function getInstance() external view returns (IInstance instance);
45
64
 
46
- /// @dev returns the service address for the specified domain
47
- /// gets address via lookup from registry using the major version form the linked instance
48
- function getServiceAddress(ObjectType domain) external view returns (address service);
65
+ /// @dev returns the name of this component
66
+ /// to successfully register the component with an instance the name MUST be unique in the linked instance
67
+ function getName() external view returns (string memory name);
49
68
 
50
- function setProductNftId(NftId productNftId) external;
69
+ /// @dev defines which ERC20 token is used by this component
70
+ function getToken() external view returns (IERC20Metadata token);
71
+
72
+ /// @dev returns token handler for this component
73
+ /// only registered components return a non zero token handler
74
+ function getTokenHandler() external view returns (TokenHandler tokenHandler);
75
+
76
+ /// @dev defines the wallet address used to hold the ERC20 tokens related to this component
77
+ /// the default address is the component token address
78
+ function getWallet() external view returns (address walletAddress);
79
+
80
+ /// @dev defines the product to which this component is linked to
81
+ /// this is only relevant for pool and distribution components
51
82
  function getProductNftId() external view returns (NftId productNftId);
52
83
 
53
- function getInstanceService() external view returns (IInstanceService);
54
- function getProductService() external view returns (IProductService);
84
+ function isNftInterceptor() external view returns(bool isInterceptor);
85
+
86
+ /// @dev returns component infos for this pool
87
+ /// when registered with an instance the info is obtained from the data stored in the instance
88
+ /// when not registered the function returns the info from the component contract
89
+ function getComponentInfo() external view returns (IComponents.ComponentInfo memory info);
55
90
  }
@@ -17,6 +17,7 @@ interface IDistributionComponent is IComponent {
17
17
  function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
18
18
 
19
19
  function setFees(
20
+ Fee memory minDistributionOwnerFee,
20
21
  Fee memory distributionFee
21
22
  ) external;
22
23
 
@@ -44,38 +45,11 @@ interface IDistributionComponent is IComponent {
44
45
  bytes memory data
45
46
  ) external;
46
47
 
47
- /**
48
- * @dev lets distributors create referral codes.
49
- * referral codes need to be unique
50
- * distributor is identified via msg.sender.
51
- */
52
- function createReferral(
53
- NftId distributorNftId,
54
- string memory code,
55
- UFixed discountPercentage,
56
- uint32 maxReferrals,
57
- Timestamp expiryAt,
58
- bytes memory data
59
- ) external returns (ReferralId referralId);
60
-
61
- function calculateFeeAmount(
62
- ReferralId referralId,
63
- uint256 netPremiumAmount
64
- ) external view returns (uint256 feeAmount);
65
-
66
48
  function calculateRenewalFeeAmount(
67
49
  ReferralId referralId,
68
50
  uint256 netPremiumAmount
69
51
  ) external view returns (uint256 feeAmount);
70
52
 
71
- /// @dev callback from product service when selling a policy for a specific referralId
72
- /// the used referral id and the collected fee are provided as parameters
73
- /// the component implementation can then process this information accordingly
74
- function processSale(
75
- ReferralId referralId,
76
- uint256 feeAmount
77
- ) external;
78
-
79
53
  /// @dev callback from product service when a policy is renews for a specific referralId
80
54
  function processRenewal(
81
55
  ReferralId referralId,
@@ -92,9 +66,6 @@ interface IDistributionComponent is IComponent {
92
66
  string memory referralCode
93
67
  ) external returns (ReferralId referralId);
94
68
 
95
- /// @dev returns true iff the referral id is valid
96
- function referralIsValid(ReferralId referralId) external view returns (bool isValid);
97
-
98
69
  /// @dev returns true iff the component needs to be called when selling/renewing policis
99
70
  function isVerifying() external view returns (bool verifying);
100
71
  }
@@ -1,87 +1,114 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Amount} from "../types/Amount.sol";
4
5
  import {Fee} from "../types/Fee.sol";
5
6
  import {IComponent} from "./IComponent.sol";
6
- import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {IComponents} from "../instance/module/IComponents.sol";
7
8
  import {NftId} from "../types/NftId.sol";
9
+ import {RoleId} from "../types/RoleId.sol";
10
+ import {Seconds} from "../types/Seconds.sol";
8
11
  import {UFixed} from "../types/UFixed.sol";
9
12
 
10
13
  /// @dev pool components hold and manage the collateral to cover active policies
11
14
  /// pools come in different flavors
12
15
  interface IPoolComponent is IComponent {
13
16
 
14
- event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
17
+ error ErrorPoolNotBundleOwner(NftId bundleNftId, address caller);
18
+ error ErrorPoolNotPoolService(address caller);
15
19
 
16
- error ErrorPoolNotPoolService(address service);
20
+ error ErrorPoolApplicationBundleMismatch(NftId applicationNftId);
17
21
 
18
- function getSetupInfo() external view returns (ISetup.PoolSetupInfo memory setupInfo);
22
+ event LogPoolVerifiedByPool(address pool, NftId applicationNftId, Amount collateralizationAmount);
19
23
 
20
- function setFees(
21
- Fee memory poolFee,
22
- Fee memory stakingFee,
23
- Fee memory performanceFee
24
- ) external;
24
+ /// @dev increases the staked tokens by the specified amount
25
+ /// only the bundle owner may stake tokens
26
+ /// bundle MUST be in active or locked state
27
+ function stake(NftId bundleNftId, Amount amount) external;
28
+
29
+ /// @dev decreases the staked tokens by the specified amount
30
+ /// only the bundle owner may unstake tokens from the bundle
31
+ /// bundle MUST be in active, locked or closed state
32
+ function unstake(NftId bundleNftId, Amount amount) external;
25
33
 
26
- /// @dev sets an additional bundle fee, this fee is added on top of the poolFee and deducted from the premium amounts.
34
+ /// @dev extends the bundle lifetime of the bundle by the specified time
35
+ /// only the bundle owner may extend the bundle's lifetime
36
+ /// bundle MUST be in active or locked state
37
+ function extend(NftId bundleNftId, Seconds lifetimeExtension) external;
38
+
39
+ /// @dev locks the specified bundle
40
+ /// a bundle to be locked MUST be in active state
41
+ /// locked bundles may not be used to collateralize any new policy
42
+ function lockBundle(NftId bundleNftId) external;
43
+
44
+ /// @dev unlocks the specified bundle
45
+ /// a bundle to be unlocked MUST be in locked state
46
+ function unlockBundle(NftId bundleNftId) external;
47
+
48
+ /// @dev close the specified bundle
49
+ /// a bundle to be closed MUST be in active or locked state
50
+ /// to close a bundle all all linked policies MUST be in closed state as well
51
+ /// closing a bundle finalizes the bundle bookkeeping including overall profit calculation
52
+ /// once a bundle is closed this action cannot be reversed
53
+ function close(NftId bundleNftId) external;
54
+
55
+ /// @dev sets the fee for the specified bundle
56
+ /// the fee is added on top of the poolFee and deducted from the premium amounts
27
57
  /// via these fees individual bundler owner may earn income per policy in the context of peer to peer pools
28
58
  function setBundleFee(
29
59
  NftId bundleNftId,
30
60
  Fee memory fee
31
61
  ) external;
32
62
 
63
+ /// @dev sets the maximum overall capital amound held by this pool
64
+ /// function may only be called by pool owner
65
+ function setMaxCapitalAmount(Amount maxCapitalAmount) external;
66
+
67
+ /// @dev sets the required role to create/own bundles
68
+ /// may only be called once after setting up a pool
69
+ /// may only be called by pool owner
70
+ function setBundleOwnerRole(RoleId bundleOwnerRole) external;
71
+
72
+ /// @dev update pool fees to the specified values
73
+ /// pool fees: are deducted from the premium amount and goes to the pool owner
74
+ /// staking fees: are deducted from the staked tokens by a bundle owner and goes to the pool owner
75
+ /// performance fees: when a bundle is closed a bundle specific profit is calculated
76
+ /// the performance fee is deducted from this profit and goes to the pool owner
77
+ function setFees(
78
+ Fee memory poolFee,
79
+ Fee memory stakingFee,
80
+ Fee memory performanceFee
81
+ ) external;
82
+
33
83
  /// @dev this is a callback function that is called by the product service when underwriting a policy.
34
84
  /// the pool has the option to check the details and object to underwriting by reverting.
35
85
  /// the function is only called for "active" pools that ask to be involved/notified
36
86
  /// by product related state changes.
37
87
  function verifyApplication(
38
88
  NftId applicationNftId,
39
- bytes memory policyData,
89
+ bytes memory applicationData,
90
+ NftId bundleNftId,
40
91
  bytes memory bundleFilter,
41
- uint256 collateralizationAmount
92
+ Amount collateralizationAmount
42
93
  ) external;
43
94
 
44
- function lockBundle(NftId bundleNftId) external;
45
-
46
- function unlockBundle(NftId bundleNftId) external;
47
-
48
- /// @dev defines the multiplier to calculate the required collateral to cover a given sum insured amount
49
- /// default implementation returns 100%
50
- function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
51
-
52
- /// @dev defines the amount of collateral held in the pool.
53
- /// if the value is < 100% the pool is required to hold a policy that covers the locally missing collateral
54
- /// default implementation returns 100%
55
- function getRetentionLevel() external view returns (UFixed retentionLevel);
56
-
57
- /// @dev declares if pool intercept transfers of bundle nft ids
58
- /// - yes: pool may block transfer of bundle ownership or simply updates some bookkeeping related to bundle ownership. callback function is nftTransferFrom
59
- /// - no: pool is not involved in transfer of bundle ownership
60
- /// default implementation returns false (no)
61
- function isInterceptingBundleTransfers() external view returns (bool);
62
-
63
- /// @dev declares if pool relies on external management of collateral (yes/no):
64
- /// - yes: underwriting of new policies does not require an actual token balance, instead it is assumed that the pool owner will manage funds externally and inject enough tokens to allow process confirmed payouts
65
- /// - no: the pool smart contract ensures that the necessary capacity of the pool prior to underwriting.
66
- /// default implementation returns false (no)
67
- function isExternallyManaged() external view returns (bool);
68
-
69
- /// @dev declares if pool component is actively involved in underwriting (yes/no):
70
- /// - yes: verifying pools components actively confirm underwriting applications, ie the pool component logic explicitly needs to confirm the locking of collateral to cover the sum insured of the policy
71
- /// - no: underwriting a policy does not require any interaction with the pool component if the covering bundle can provide the necessary captial
72
- /// default implementation returnsfalse (no)
73
- function isVerifyingApplications() external view returns (bool);
74
-
75
- /// @dev returns true iff the policy application data in policyData matches
76
- /// with the bundle filter criteria encoded in bundleFilter
95
+ /// @dev returns true iff the application matches with the bundle
77
96
  /// this is a callback function that is only called if a pool declares itself as a verifying pool
78
97
  /// default implementation returns true
79
- function policyMatchesBundle(
80
- bytes memory policyData,
81
- bytes memory bundleFilter
98
+ function applicationMatchesBundle(
99
+ NftId applicationNftId,
100
+ bytes memory applicationData,
101
+ NftId bundleNftId,
102
+ bytes memory bundleFilter,
103
+ Amount collateralizationAmount
82
104
  )
83
105
  external
84
106
  view
85
107
  returns (bool isMatching);
86
108
 
109
+ /// @dev returns pool specific infos for this pool
110
+ /// when registered with an instance the info is obtained from the data stored in the instance
111
+ /// when not registered the function returns the info from the component contract
112
+ function getPoolInfo() external view returns (IComponents.PoolInfo memory info);
113
+
87
114
  }
@@ -1,12 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Amount} from "../types/Amount.sol";
4
5
  import {Fee} from "../types/Fee.sol";
5
6
  import {IComponent} from "./IComponent.sol";
6
7
  import {ISetup} from "../instance/module/ISetup.sol";
7
8
  import {NftId} from "../types/NftId.sol";
8
9
  import {ReferralId} from "../types/Referral.sol";
9
10
  import {RiskId} from "../types/RiskId.sol";
11
+ import {Seconds} from "../types/Seconds.sol";
10
12
 
11
13
  interface IProductComponent is IComponent {
12
14
 
@@ -18,20 +20,20 @@ interface IProductComponent is IComponent {
18
20
  ) external;
19
21
 
20
22
  function calculatePremium(
21
- uint256 sumInsuredAmount,
23
+ Amount sumInsuredAmount,
22
24
  RiskId riskId,
23
- uint256 lifetime,
25
+ Seconds lifetime,
24
26
  bytes memory applicationData,
25
27
  NftId bundleNftId,
26
28
  ReferralId referralId
27
- ) external view returns (uint256 premiumAmount);
29
+ ) external view returns (Amount premiumAmount);
28
30
 
29
31
  function calculateNetPremium(
30
- uint256 sumInsuredAmount,
32
+ Amount sumInsuredAmount,
31
33
  RiskId riskId,
32
- uint256 lifetime,
34
+ Seconds lifetime,
33
35
  bytes memory applicationData
34
- ) external view returns (uint256 netPremiumAmount);
36
+ ) external view returns (Amount netPremiumAmount);
35
37
 
36
38
 
37
39
  function getPoolNftId() external view returns (NftId poolNftId);