@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f2df3e2-873

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 (383) hide show
  1. package/README.md +75 -14
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +954 -219
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → components/IComponent.sol/IComponent.json} +303 -164
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +864 -49
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +849 -247
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +637 -224
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2444 -184
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +368 -156
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1033 -1216
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +593 -180
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +357 -211
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +653 -216
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +392 -75
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +276 -150
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1060 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +681 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1266 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +725 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1040 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1774 -0
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +793 -0
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +627 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +686 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +937 -0
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +437 -154
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +90 -391
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1511 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +741 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1237 -0
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +661 -0
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +840 -0
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +653 -0
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +373 -61
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +223 -229
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +333 -188
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +227 -330
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +304 -138
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  210. package/contracts/components/Component.sol +253 -0
  211. package/contracts/components/Distribution.sol +204 -86
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -16
  214. package/contracts/components/IPoolComponent.sol +88 -37
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +224 -181
  217. package/contracts/components/Product.sol +249 -175
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  219. package/contracts/instance/BundleManager.sol +126 -0
  220. package/contracts/instance/Cloneable.sol +51 -0
  221. package/contracts/instance/IInstance.sol +88 -14
  222. package/contracts/instance/IInstanceService.sol +54 -3
  223. package/contracts/instance/Instance.sol +155 -281
  224. package/contracts/instance/InstanceAccessManager.sol +414 -175
  225. package/contracts/instance/InstanceReader.sol +67 -30
  226. package/contracts/instance/InstanceService.sol +431 -55
  227. package/contracts/instance/InstanceServiceManager.sol +11 -13
  228. package/contracts/instance/ObjectManager.sol +82 -0
  229. package/contracts/instance/base/ComponentService.sol +121 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +23 -6
  232. package/contracts/instance/module/IAccess.sol +36 -20
  233. package/contracts/instance/module/IBundle.sol +8 -4
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +41 -9
  237. package/contracts/instance/module/ISetup.sol +9 -19
  238. package/contracts/instance/service/ApplicationService.sol +355 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +436 -0
  241. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  242. package/contracts/instance/service/ClaimService.sol +239 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +431 -0
  245. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  246. package/contracts/instance/service/IApplicationService.sol +78 -0
  247. package/contracts/instance/service/IBundleService.sol +96 -0
  248. package/contracts/instance/service/IClaimService.sol +92 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +137 -0
  251. package/contracts/instance/service/IPoolService.sol +79 -17
  252. package/contracts/instance/service/IProductService.sol +6 -73
  253. package/contracts/instance/service/PolicyService.sol +541 -0
  254. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  255. package/contracts/instance/service/PoolService.sol +303 -0
  256. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  257. package/contracts/instance/service/ProductService.sol +210 -0
  258. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  259. package/contracts/registry/ChainNft.sol +9 -1
  260. package/contracts/registry/IRegistry.sol +52 -8
  261. package/contracts/registry/IRegistryService.sol +47 -14
  262. package/contracts/registry/ITransferInterceptor.sol +1 -0
  263. package/contracts/registry/Registry.sol +270 -226
  264. package/contracts/registry/RegistryAccessManager.sol +216 -0
  265. package/contracts/registry/RegistryService.sol +111 -268
  266. package/contracts/registry/RegistryServiceManager.sol +24 -26
  267. package/contracts/registry/ReleaseManager.sol +324 -0
  268. package/contracts/registry/TokenRegistry.sol +116 -0
  269. package/contracts/shared/ERC165.sol +14 -8
  270. package/contracts/shared/INftOwnable.sol +11 -10
  271. package/contracts/shared/IPolicyHolder.sol +26 -0
  272. package/contracts/shared/IRegisterable.sol +4 -6
  273. package/contracts/shared/IRegistryLinked.sol +12 -0
  274. package/contracts/shared/IService.sol +5 -4
  275. package/contracts/shared/IVersionable.sol +4 -47
  276. package/contracts/shared/NftOwnable.sol +67 -83
  277. package/contracts/shared/PolicyHolder.sol +81 -0
  278. package/contracts/shared/ProxyManager.sol +100 -25
  279. package/contracts/shared/Registerable.sol +16 -31
  280. package/contracts/shared/RegistryLinked.sol +48 -0
  281. package/contracts/shared/Service.sol +42 -24
  282. package/contracts/shared/TokenHandler.sol +11 -5
  283. package/contracts/shared/Versionable.sol +4 -92
  284. package/contracts/test/TestRegisterable.sol +1 -1
  285. package/contracts/test/TestService.sol +4 -3
  286. package/contracts/types/Amount.sol +65 -0
  287. package/contracts/types/Blocknumber.sol +1 -0
  288. package/contracts/types/ClaimId.sol +75 -0
  289. package/contracts/types/DistributorType.sol +2 -2
  290. package/contracts/types/Fee.sol +13 -5
  291. package/contracts/types/NftId.sol +8 -0
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/ObjectType.sol +11 -6
  294. package/contracts/types/PayoutId.sol +82 -0
  295. package/contracts/types/Referral.sol +4 -0
  296. package/contracts/types/RoleId.sol +26 -11
  297. package/contracts/types/Seconds.sol +54 -0
  298. package/contracts/types/StateId.sol +11 -2
  299. package/contracts/types/Timestamp.sol +18 -13
  300. package/contracts/types/UFixed.sol +1 -0
  301. package/contracts/types/Version.sol +5 -1
  302. package/package.json +3 -3
  303. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  304. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
  305. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  306. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  311. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  313. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  315. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  317. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  319. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  321. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  323. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  327. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  329. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  332. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  336. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  338. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  340. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  342. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  344. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  346. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  347. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  348. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  349. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  350. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  351. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  352. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  353. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  354. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  356. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  357. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  358. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  359. package/contracts/components/BaseComponent.sol +0 -86
  360. package/contracts/components/IBaseComponent.sol +0 -24
  361. package/contracts/experiment/cloning/Cloner.sol +0 -47
  362. package/contracts/experiment/errors/Require.sol +0 -38
  363. package/contracts/experiment/errors/Revert.sol +0 -44
  364. package/contracts/experiment/inheritance/A.sol +0 -53
  365. package/contracts/experiment/inheritance/B.sol +0 -28
  366. package/contracts/experiment/inheritance/C.sol +0 -34
  367. package/contracts/experiment/inheritance/IA.sol +0 -13
  368. package/contracts/experiment/inheritance/IB.sol +0 -10
  369. package/contracts/experiment/inheritance/IC.sol +0 -12
  370. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  371. package/contracts/experiment/statemachine/ISM.sol +0 -25
  372. package/contracts/experiment/statemachine/SM.sol +0 -57
  373. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  374. package/contracts/experiment/types/TypeA.sol +0 -47
  375. package/contracts/experiment/types/TypeB.sol +0 -29
  376. package/contracts/instance/AccessManagedSimple.sol +0 -114
  377. package/contracts/instance/AccessManagerSimple.sol +0 -682
  378. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  379. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  380. package/contracts/instance/base/IInstanceBase.sol +0 -23
  381. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  382. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  383. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,92 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IInstance} from "../IInstance.sol";
5
+ import {InstanceReader} from "../InstanceReader.sol";
6
+ import {IService} from "../../shared/IService.sol";
7
+
8
+ import {Amount} from "../../types/Amount.sol";
9
+ import {ClaimId} from "../../types/ClaimId.sol";
10
+ import {PayoutId} from "../../types/PayoutId.sol";
11
+ import {NftId} from "../../types/NftId.sol";
12
+ import {StateId} from "../../types/StateId.sol";
13
+ import {Timestamp} from "../../types/Timestamp.sol";
14
+ import {UFixed} from "../../types/UFixed.sol";
15
+ import {Fee} from "../../types/Fee.sol";
16
+
17
+ /// @dev gif service responsible for creating claims and payouts
18
+ /// only product components may call transaction functions
19
+ interface IClaimService is
20
+ IService
21
+ {
22
+
23
+ error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
24
+ error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
25
+ error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
26
+
27
+ /// @dev create a new claim for the specified policy
28
+ /// function can only be called by product, policy needs to match with calling product
29
+ function submit(
30
+ IInstance instance,
31
+ NftId policyNftId,
32
+ ClaimId claimId,
33
+ Amount claimAmount,
34
+ bytes memory claimData
35
+ ) external;
36
+
37
+ /// @dev confirms the specified claim and fixes the final claim amount
38
+ /// function can only be called by product, policy needs to match with calling product
39
+ function confirm(
40
+ IInstance instance,
41
+ InstanceReader instanceReader,
42
+ NftId policyNftId,
43
+ ClaimId claimId,
44
+ Amount claimAmount
45
+ ) external;
46
+
47
+ /// @dev declares the claim as invalid, no payout(s) will be made
48
+ /// function can only be called by product, policy needs to match with calling product
49
+ function decline(
50
+ IInstance instance,
51
+ InstanceReader instanceReader,
52
+ NftId policyNftId,
53
+ ClaimId claimId
54
+ ) external;
55
+
56
+ /// @dev closes the claim
57
+ /// a claim may only be closed once all existing payouts have been executed and the sum of the paid out amounts has reached the claim amount
58
+ /// function can only be called by product, policy needs to match with calling product
59
+ function close(
60
+ IInstance instance,
61
+ InstanceReader instanceReader,
62
+ NftId policyNftId,
63
+ ClaimId claimId
64
+ ) external;
65
+
66
+ /// @dev create a new payout for the specified policy
67
+ /// payoutId may be constructed using PayoutIdLib(claimId, payoutNo)
68
+ /// function can only be called by product, policy needs to match with calling product
69
+ function createPayout(
70
+ IInstance instance,
71
+ NftId policyNftId,
72
+ PayoutId payoutId,
73
+ Amount payoutAmount,
74
+ bytes calldata payoutData
75
+ ) external;
76
+
77
+ /// @dev callback function to confirm transfer of payout token to beneficiary
78
+ /// allows claim service to update claims/payout book keeping
79
+ /// only pool service can confirm executed payout
80
+ function processPayout(
81
+ IInstance instance,
82
+ InstanceReader instanceReader,
83
+ NftId policyNftId,
84
+ PayoutId payoutId
85
+ )
86
+ external
87
+ returns (
88
+ Amount amount,
89
+ bool payoutIsClosingClaim
90
+ );
91
+
92
+ }
@@ -3,10 +3,97 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
+ import {IPolicy} from "../module/IPolicy.sol";
6
7
  import {IService} from "../../shared/IService.sol";
8
+ import {UFixed} from "../../types/UFixed.sol";
9
+ import {DistributorType} from "../../types/DistributorType.sol";
10
+ import {ReferralId} from "../../types/Referral.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+
7
13
 
8
14
  interface IDistributionService is IService {
15
+ error ErrorDistributionServiceCallerNotRegistered(address caller);
16
+ error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
17
+ error ErrorIDistributionServiceCallerNotDistributor(address caller);
18
+ error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
19
+ error ErrorIDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
20
+ error ErrorIDistributionServiceDiscountTooLow(uint256 minDiscountPercentage, uint256 discountPercentage);
21
+ error ErrorIDistributionServiceDiscountTooHigh(uint256 maxDiscountPercentage, uint256 discountPercentage);
22
+ error ErrorIDistributionServiceExpiryTooLong(uint256 maxReferralLifetime, uint256 expiryAt);
23
+ error ErrorIDistributionServiceInvalidReferral(string code);
24
+ error ErrorIDistributionServiceExpirationInvalid(Timestamp expiryAt);
25
+ error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
26
+ error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
27
+ error ErrorIDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
28
+ error ErrorIDistributionServiceFeeCalculationMismatch(
29
+ uint256 distributionFeeFixAmount,
30
+ uint256 distributionFeeVarAmount,
31
+ uint256 distributionOwnerFeeFixAmount,
32
+ uint256 distributionOwnerFeeVarAmount,
33
+ uint256 commissionAmount,
34
+ uint256 discountAmount
35
+ );
36
+ error ErrorIDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
37
+ error ErrorIDistributionServiceInvalidFeeTransferred(uint256 transferredDistributionFeeAmount, uint256 expectedDistributionFeeAmount);
38
+
9
39
  function setFees(
40
+ Fee memory minDistributionOwnerFee,
10
41
  Fee memory distributionFee
11
42
  ) external;
43
+
44
+ function createDistributorType(
45
+ string memory name,
46
+ UFixed minDiscountPercentage,
47
+ UFixed maxDiscountPercentage,
48
+ UFixed commissionPercentage,
49
+ uint32 maxReferralCount,
50
+ uint32 maxReferralLifetime,
51
+ bool allowSelfReferrals,
52
+ bool allowRenewals,
53
+ bytes memory data
54
+ )
55
+ external
56
+ returns (DistributorType distributorType);
57
+
58
+ function createDistributor(
59
+ address distributor,
60
+ DistributorType distributorType,
61
+ bytes memory data
62
+ ) external returns (NftId distributorNftId);
63
+
64
+ function updateDistributorType(
65
+ NftId distributorNftId,
66
+ DistributorType distributorType,
67
+ bytes memory data
68
+ ) external;
69
+
70
+ function createReferral(
71
+ NftId distributorNftId,
72
+ string memory code,
73
+ UFixed discountPercentage,
74
+ uint32 maxReferrals,
75
+ Timestamp expiryAt,
76
+ bytes memory data
77
+ )
78
+ external
79
+ returns (ReferralId referralId);
80
+
81
+ /// @dev callback from product service when selling a policy for a specific referralId
82
+ function processSale(
83
+ NftId distributionNftId,
84
+ ReferralId referralId,
85
+ IPolicy.Premium memory premium,
86
+ uint256 transferredDistributionFeeAmount
87
+ ) external;
88
+
89
+ function calculateFeeAmount(
90
+ NftId distributionNftId,
91
+ ReferralId referralId,
92
+ IPolicy.Premium memory premium
93
+ ) external view returns (IPolicy.Premium memory finalPremium);
94
+
95
+ function referralIsValid(
96
+ NftId distributorNftId,
97
+ ReferralId referralId
98
+ ) external view returns (bool isValid);
12
99
  }
@@ -0,0 +1,137 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
7
+ import {Amount} from "../../types/Amount.sol";
8
+ import {ClaimId} from "../../types/ClaimId.sol";
9
+ import {NftId} from "../../types/NftId.sol";
10
+ import {PayoutId} from "../../types/PayoutId.sol";
11
+ import {ReferralId} from "../../types/Referral.sol";
12
+ import {RiskId} from "../../types/RiskId.sol";
13
+ import {Seconds} from "../../types/Seconds.sol";
14
+ import {StateId} from "../../types/StateId.sol";
15
+ import {Timestamp} from "../../types/Timestamp.sol";
16
+ import {UFixed} from "../../types/UFixed.sol";
17
+ import {Fee} from "../../types/Fee.sol";
18
+
19
+ interface IPolicyService is IService {
20
+
21
+ event LogPolicyServiceClaimSubmitted(NftId policyNftId, ClaimId claimId, Amount claimAmount);
22
+ event LogPolicyServiceClaimConfirmed(NftId policyNftId, ClaimId claimId, Amount confirmedAmount);
23
+ event LogPolicyServiceClaimDeclined(NftId policyNftId, ClaimId claimId);
24
+ event LogPolicyServiceClaimClosed(NftId policyNftId, ClaimId claimId);
25
+
26
+ event LogPolicyServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount);
27
+ event LogPolicyServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount);
28
+
29
+ error ErrorPolicyServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
30
+ error ErrorPolicyServicePolicyNotOpen(NftId policyNftId);
31
+ error ErrorPolicyServiceClaimExceedsSumInsured(NftId policyNftId, Amount sumInsured, Amount payoutsIncludingClaimAmount);
32
+
33
+ error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
34
+ error ErrorIPolicyServicePremiumAlreadyPaid(NftId policyNftId, uint256 premiumPaidAmount);
35
+ error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
36
+ error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
37
+ error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
38
+ error ErrorIPolicyServicePremiumNotFullyPaid(NftId policyNftId, uint256 premiumAmount, uint256 premiumPaidAmount);
39
+ error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
40
+ error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
41
+
42
+ error ErrorIPolicyServicePremiumMismatch(NftId policyNftId, uint256 expectedPremiumAmount, uint256 recalculatedPremiumAmount);
43
+
44
+ /// @dev declines an application represented by {policyNftId}
45
+ /// an application can only be declined in applied state
46
+ /// only the related product may decline an application
47
+ function decline(NftId policyNftId) external;
48
+
49
+ /// @dev collateralizes the policy represented by {policyNftId}
50
+ /// sets the policy state to underwritten
51
+ /// may set the policy state to activated and set the activation date
52
+ /// optionally collects premiums and activates the policy.
53
+ /// - premium payment is only attempted if requirePremiumPayment is set to true
54
+ /// - activation is only done if activateAt is a non-zero timestamp
55
+ /// an application can only be underwritten in applied state
56
+ /// only the related product may collateralize an application
57
+ function collateralize(
58
+ NftId policyNftId,
59
+ bool requirePremiumPayment,
60
+ Timestamp activateAt
61
+ ) external;
62
+
63
+ /// @dev collects the premium token for the specified policy
64
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
65
+
66
+ /// @dev activates the specified policy and sets the activation date in the policy metadata
67
+ /// to activate a policy it needs to be in underwritten state
68
+ function activate(NftId policyNftId, Timestamp activateAt) external;
69
+
70
+ /// @dev expires the specified policy and sets the expiry date in the policy metadata
71
+ /// to expire a policy it must be in active state, policies may be expired even when the predefined expiry date is still in the future
72
+ /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
73
+ /// this function can only be called by a product. the policy needs to match with the calling product
74
+ function expire(NftId policyNftId) external;
75
+
76
+ /// @dev closes the specified policy and sets the closed data in the policy metadata
77
+ /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
78
+ /// this function can only be called by a product. the policy needs to match with the calling product
79
+ function close(NftId policyNftId) external;
80
+
81
+ /// @dev create a new claim for the specified policy
82
+ /// returns the id of the newly created claim
83
+ /// function can only be called by product, policy needs to match with calling product
84
+ function submitClaim(
85
+ NftId policyNftId,
86
+ Amount claimAmount,
87
+ bytes memory claimData
88
+ ) external returns (ClaimId claimId);
89
+
90
+ /// @dev declines the specified claim
91
+ /// function can only be called by product, policy needs to match with calling product
92
+ function declineClaim(
93
+ NftId policyNftId,
94
+ ClaimId claimId) external;
95
+
96
+ /// @dev confirms the specified claim and specifies the payout amount
97
+ /// function can only be called by product, policy needs to match with calling product
98
+ function confirmClaim(
99
+ NftId policyNftId,
100
+ ClaimId claimId,
101
+ Amount confirmedAmount
102
+ ) external;
103
+
104
+ /// @dev closes the specified claim
105
+ /// function can only be called by product, policy needs to match with calling product
106
+ function closeClaim(
107
+ NftId policyNftId,
108
+ ClaimId claimId
109
+ ) external;
110
+
111
+ /// @dev creates a new payout for the specified claim
112
+ /// returns the id of the newly created payout, this id is unique for the specified policy
113
+ /// function can only be called by product, policy needs to match with calling product
114
+ function createPayout(
115
+ NftId policyNftId,
116
+ ClaimId claimId,
117
+ Amount amount,
118
+ bytes memory data
119
+ )
120
+ external
121
+ returns (PayoutId payoutId);
122
+
123
+ /// @dev processes the specified payout
124
+ /// this includes moving the payout token to the beneficiary (default: policy holder)
125
+ /// function can only be called by product, policy needs to match with calling product
126
+ function processPayout(
127
+ NftId policyNftId,
128
+ PayoutId payoutId
129
+ ) external;
130
+
131
+ // TODO move function to pool service
132
+ function calculateRequiredCollateral(
133
+ UFixed collateralizationLevel,
134
+ uint256 sumInsuredAmount
135
+ ) external pure returns(uint256 collateralAmount);
136
+
137
+ }
@@ -1,37 +1,99 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {NftId} from "../../types/NftId.sol";
4
+ import {Amount} from "../../types/Amount.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
+ import {NftId} from "../../types/NftId.sol";
7
+ import {IBundle} from "../module/IBundle.sol";
8
+ import {IInstance} from "../../instance/IInstance.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
6
10
  import {IService} from "../../shared/IService.sol";
11
+ import {RoleId} from "../../types/RoleId.sol";
12
+ import {Seconds} from "../../types/Seconds.sol";
13
+ import {StateId} from "../../types/StateId.sol";
7
14
 
8
15
  interface IPoolService is IService {
16
+
17
+ event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, uint256 previousMaxCapitalAmount, uint256 currentMaxCapitalAmount);
18
+ event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
19
+
20
+ event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
21
+ event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
22
+
23
+ error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
24
+ error ErrorPoolServiceBundlePoolMismatch(NftId bundlePoolNftId, NftId productPoolNftId);
25
+
26
+ /// @dev registers a new pool with the registry service
27
+ function register(address poolAddress) external returns(NftId);
28
+
29
+ /// @dev defines the required role for bundle owners for the calling pool
30
+ /// default implementation returns PUBLIC ROLE
31
+ function setBundleOwnerRole(RoleId bundleOwnerRole) external;
32
+
33
+ /// @dev sets the max capital amount for the calling pool
34
+ function setMaxCapitalAmount(uint256 maxCapitalAmount) external;
35
+
36
+ /// @dev set pool sepecific fees
9
37
  function setFees(
10
38
  Fee memory poolFee,
11
39
  Fee memory stakingFee,
12
40
  Fee memory performanceFee
13
41
  ) external;
14
42
 
15
- function createBundle(
16
- address owner,
17
- Fee memory fee,
18
- uint256 amount,
19
- uint256 lifetime,
20
- bytes calldata filter
21
- ) external returns(NftId bundleNftId);
22
-
23
- function setBundleFee(
24
- NftId bundleNftId,
25
- Fee memory fee
43
+
44
+ /// @dev locks required collateral to cover the specified application (and turn it into a policy)
45
+ /// - retention level == 1: the full collateral amount will be locked by the specified bundle
46
+ /// - retention level < 1: a part of the coverage is provided by the specified bundle, the rest by the pool component
47
+ /// in which case the pool component might hold a re-insurance policy
48
+ /// may only be called by the policy service for unlocked pool components
49
+ function lockCollateral(
50
+ IInstance instance,
51
+ NftId productNftId,
52
+ NftId applicationNftId,
53
+ IPolicy.PolicyInfo memory applicationInfo,
54
+ uint256 premiumAmount
55
+ ) external;
56
+
57
+
58
+ /// @dev releases the remaining collateral linked to the specified policy
59
+ /// may only be called by the policy service for unlocked pool components
60
+ function releaseCollateral(
61
+ IInstance instance,
62
+ NftId policyNftId,
63
+ IPolicy.PolicyInfo memory policyInfo
26
64
  ) external;
27
65
 
28
- // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
29
66
 
30
- // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
67
+ /// @dev create a new bundle for the provided parameters
68
+ /// staking fees will be deducted by the pool service from the staking amount
69
+ /// may only be called by registered and unlocked pool components
70
+ function createBundle(
71
+ address owner, // initial bundle owner
72
+ Fee memory fee, // fees deducted from premium that go to bundle owner
73
+ Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
74
+ Seconds lifetime, // initial duration for which new policies are covered
75
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
76
+ )
77
+ external
78
+ returns(NftId bundleNftId); // the nft id of the newly created bundle
79
+
80
+
81
+ /// @dev closes the specified bundle
82
+ /// only open bundles (active or locked) may be closed
83
+ /// to close a bundle it may not have any non-closed polices attached to it
84
+ /// bundle fees and remaining capital (after deduction of the performance fee) will be transferred to the bundle owner
85
+ /// may only be called by registered and unlocked pool components
86
+ function closeBundle(NftId bundleNftId) external;
87
+
31
88
 
32
- // function lockBundle(NftId bundleNftId) external;
89
+ /// @dev increase stakes for bundle
90
+ /// staking fees will be deducted by the pool service from the staking amount
91
+ /// may only be called by registered and unlocked pool components
92
+ // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
33
93
 
34
- // function unlockBundle(NftId bundleNftId) external;
35
94
 
36
- // function closeBundle(NftId bundleNftId) external;
95
+ /// @dev decrease stakes for bundle
96
+ /// performance fees will be deducted by the pool service from the staking amount
97
+ /// may only be called by registered and unlocked pool components
98
+ // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
37
99
  }
@@ -13,6 +13,9 @@ import {UFixed} from "../../types/UFixed.sol";
13
13
  import {Fee} from "../../types/Fee.sol";
14
14
 
15
15
  interface IProductService is IService {
16
+
17
+ function register(address productAddress) external returns(NftId);
18
+
16
19
  function setFees(
17
20
  Fee memory productFee,
18
21
  Fee memory processingFee
@@ -24,84 +27,14 @@ interface IProductService is IService {
24
27
  ) external;
25
28
 
26
29
 
27
- function setRiskInfo(
30
+ function updateRisk(
28
31
  RiskId riskId,
29
- IRisk.RiskInfo memory data
32
+ bytes memory data
30
33
  ) external;
31
34
 
32
35
 
33
36
  function updateRiskState(
34
37
  RiskId riskId,
35
- StateId state
38
+ StateId newState
36
39
  ) external;
37
-
38
-
39
- function calculatePremium(
40
- RiskId riskId,
41
- uint256 sumInsuredAmount,
42
- uint256 lifetime,
43
- bytes memory applicationData,
44
- NftId bundleNftId,
45
- ReferralId referralId
46
- )
47
- external
48
- view
49
- returns (
50
- uint256 premiumAmount,
51
- uint256 productFeeAmount,
52
- uint256 poolFeeAmount,
53
- uint256 bundleFeeAmount,
54
- uint256 distributionFeeAmount
55
- );
56
-
57
-
58
- function createApplication(
59
- address applicationOwner,
60
- RiskId riskId,
61
- uint256 sumInsuredAmount,
62
- uint256 lifetime,
63
- bytes memory applicationData,
64
- NftId bundleNftId,
65
- ReferralId referralId
66
- ) external returns (NftId nftId);
67
-
68
- /**
69
- * @dev revokes the application represented by {policyNftId}.
70
- * an application can only be revoked in applied state.
71
- * only the application holder may revoke an application.
72
- */
73
- function revoke(NftId policyNftId) external;
74
-
75
- /**
76
- * @dev underwrites the policy represented by {policyNftId}.
77
- * optionally collects premiums and activates the policy.
78
- * - premium payment is only attempted if requirePremiumPayment is set to true
79
- * - activation is only done if activateAt is a non-zero timestamp
80
- */
81
- function underwrite(
82
- NftId policyNftId,
83
- bool requirePremiumPayment,
84
- Timestamp activateAt
85
- ) external;
86
-
87
- // function decline(uint256 nftId) external;
88
- // function expire(uint256 nftId) external;
89
-
90
- function collectPremium(NftId policyNftId, Timestamp activateAt) external;
91
-
92
- function activate(NftId policyNftId, Timestamp activateAt) external;
93
-
94
-
95
- function close(NftId nftId) external;
96
-
97
- // function createClaim(uint256 nftId, uint256 claimAmount) external;
98
- // function confirmClaim(uint256 nftId, uint256 claimId, uint256 claimAmount) external;
99
- // function declineClaim(uint256 nftId, uint256 claimId) external;
100
- // function closeClaim(uint256 nftId, uint256 claimId) external;
101
-
102
- function calculateRequiredCollateral(
103
- UFixed collateralizationLevel,
104
- uint256 sumInsuredAmount
105
- ) external pure returns(uint256 collateralAmount);
106
-
107
40
  }