@etherisc/gif-next 0.0.2-83d1db6-607 → 0.0.2-83e248c-054

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 (233) 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 +10 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +26 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +100 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +100 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +110 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +100 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +20 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +10 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +380 -116
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +80 -14
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +310 -303
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +76 -57
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +171 -47
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -101
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +62 -22
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +85 -30
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +8 -8
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
  48. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +175 -83
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -13
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +333 -160
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  64. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +372 -86
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  66. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +183 -141
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +45 -57
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -40
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +169 -113
  75. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +438 -41
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +430 -14
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +575 -85
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +71 -19
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +468 -55
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +18 -14
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  100. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
  101. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  104. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  105. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  106. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -36
  108. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
  110. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  112. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  114. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  115. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  116. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  117. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  118. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
  122. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  125. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  126. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  127. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  129. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  131. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  132. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  133. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
  135. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  136. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  140. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  142. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  144. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestService.sol/TestService.json +101 -26
  146. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  149. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  150. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  151. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  152. package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
  153. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
  157. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  159. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  161. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  163. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  167. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  170. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
  172. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  174. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  176. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  178. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  181. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
  183. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  187. package/contracts/components/Component.sol +4 -2
  188. package/contracts/components/Distribution.sol +6 -2
  189. package/contracts/components/IComponent.sol +3 -1
  190. package/contracts/components/IPoolComponent.sol +1 -1
  191. package/contracts/components/Pool.sol +11 -8
  192. package/contracts/components/Product.sol +137 -59
  193. package/contracts/instance/BundleManager.sol +3 -4
  194. package/contracts/instance/IInstance.sol +25 -21
  195. package/contracts/instance/IInstanceService.sol +0 -4
  196. package/contracts/instance/Instance.sol +85 -102
  197. package/contracts/instance/InstanceAccessManager.sol +16 -11
  198. package/contracts/instance/InstanceReader.sol +31 -4
  199. package/contracts/instance/InstanceService.sol +29 -46
  200. package/contracts/instance/base/ComponentService.sol +17 -30
  201. package/contracts/instance/base/KeyValueStore.sol +8 -3
  202. package/contracts/instance/base/Lifecycle.sol +12 -4
  203. package/contracts/instance/module/IAccess.sol +2 -2
  204. package/contracts/instance/module/IBundle.sol +6 -4
  205. package/contracts/instance/module/IComponents.sol +6 -0
  206. package/contracts/instance/module/IPolicy.sol +11 -6
  207. package/contracts/instance/service/ApplicationService.sol +19 -14
  208. package/contracts/instance/service/BundleService.sol +163 -63
  209. package/contracts/instance/service/ClaimService.sol +114 -26
  210. package/contracts/instance/service/DistributionService.sol +38 -74
  211. package/contracts/instance/service/IApplicationService.sol +3 -7
  212. package/contracts/instance/service/IBundleService.sol +56 -22
  213. package/contracts/instance/service/IClaimService.sol +46 -15
  214. package/contracts/instance/service/IDistributionService.sol +1 -0
  215. package/contracts/instance/service/IPolicyService.sol +70 -5
  216. package/contracts/instance/service/IPoolService.sol +65 -1
  217. package/contracts/instance/service/PolicyService.sol +254 -116
  218. package/contracts/instance/service/PoolService.sol +132 -49
  219. package/contracts/instance/service/ProductService.sol +21 -52
  220. package/contracts/registry/IRegistryService.sol +4 -3
  221. package/contracts/registry/RegistryService.sol +10 -11
  222. package/contracts/registry/ReleaseManager.sol +20 -18
  223. package/contracts/shared/IService.sol +4 -6
  224. package/contracts/shared/Service.sol +21 -7
  225. package/contracts/test/TestService.sol +1 -1
  226. package/contracts/types/Amount.sol +65 -0
  227. package/contracts/types/ClaimId.sol +25 -2
  228. package/contracts/types/Fee.sol +12 -5
  229. package/contracts/types/ObjectType.sol +5 -5
  230. package/contracts/types/PayoutId.sol +33 -5
  231. package/contracts/types/StateId.sol +6 -2
  232. package/contracts/types/Timestamp.sol +5 -0
  233. package/package.json +1 -1
@@ -60,11 +60,11 @@ contract DistributionService is
60
60
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
61
61
  // TODO while DistributionService is not deployed in DistributionServiceManager constructor
62
62
  // owner is DistributionServiceManager deployer
63
- initializeService(registryAddress, owner);
63
+ initializeService(registryAddress, address(0), owner);
64
64
  registerInterface(type(IDistributionService).interfaceId);
65
65
  }
66
66
 
67
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
67
+ function getDomain() public pure override returns(ObjectType) {
68
68
  return DISTRIBUTION();
69
69
  }
70
70
 
@@ -119,9 +119,8 @@ contract DistributionService is
119
119
  revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
120
120
  }
121
121
 
122
- (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
122
+ (NftId distributionNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
123
123
  InstanceReader instanceReader = instance.getInstanceReader();
124
- NftId distributionNftId = info.nftId;
125
124
 
126
125
  ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
127
126
  distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
@@ -144,7 +143,7 @@ contract DistributionService is
144
143
  external
145
144
  returns (DistributorType distributorType)
146
145
  {
147
- (,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
146
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
148
147
 
149
148
  {
150
149
  ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
@@ -156,22 +155,18 @@ contract DistributionService is
156
155
  }
157
156
 
158
157
  distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
159
- Key32 key32 = distributorType.toKey32();
160
-
161
- if(!instance.exists(key32)) {
162
- IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
163
- name,
164
- minDiscountPercentage,
165
- maxDiscountPercentage,
166
- commissionPercentage,
167
- maxReferralCount,
168
- maxReferralLifetime,
169
- allowSelfReferrals,
170
- allowRenewals,
171
- data);
172
-
173
- instance.createDistributorType(key32, info);
174
- }
158
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
159
+ name,
160
+ minDiscountPercentage,
161
+ maxDiscountPercentage,
162
+ commissionPercentage,
163
+ maxReferralCount,
164
+ maxReferralLifetime,
165
+ allowSelfReferrals,
166
+ allowRenewals,
167
+ data);
168
+
169
+ instance.createDistributorType(distributorType, info);
175
170
  }
176
171
 
177
172
  function createDistributor(
@@ -180,7 +175,7 @@ contract DistributionService is
180
175
  bytes memory data
181
176
  ) external returns (NftId distributorNftId)
182
177
  {
183
- (, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
178
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
184
179
 
185
180
  distributorNftId = getRegistryService().registerDistributor(
186
181
  IRegistry.ObjectInfo(
@@ -209,7 +204,7 @@ contract DistributionService is
209
204
  bytes memory data
210
205
  ) external virtual
211
206
  {
212
- (,, IInstance instance) = _getAndVerifyCallingDistribution();
207
+ (, IInstance instance) = _getAndVerifyCallingDistribution();
213
208
  InstanceReader instanceReader = instance.getInstanceReader();
214
209
  IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
215
210
  distributorInfo.distributorType = distributorType;
@@ -230,7 +225,7 @@ contract DistributionService is
230
225
  virtual
231
226
  returns (ReferralId referralId)
232
227
  {
233
- (,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
228
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
234
229
 
235
230
  if (bytes(code).length == 0) {
236
231
  revert ErrorIDistributionServiceInvalidReferral(code);
@@ -268,7 +263,7 @@ contract DistributionService is
268
263
  data
269
264
  );
270
265
 
271
- instance.createReferral(referralId.toKey32(), info);
266
+ instance.createReferral(referralId, info);
272
267
  return referralId;
273
268
  }
274
269
 
@@ -288,7 +283,7 @@ contract DistributionService is
288
283
  revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
289
284
  }
290
285
 
291
- (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
286
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
292
287
  InstanceReader reader = instance.getInstanceReader();
293
288
  IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
294
289
  IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
@@ -309,7 +304,7 @@ contract DistributionService is
309
304
 
310
305
  if (isReferral) {
311
306
  referralInfo.usedReferrals += 1;
312
- instance.updateReferral(referralId.toKey32(), referralInfo, KEEP_STATE());
307
+ instance.updateReferral(referralId, referralInfo, KEEP_STATE());
313
308
 
314
309
  if (commissionAmount > 0) {
315
310
  distributorInfo.sumCommisions += commissionAmount;
@@ -329,7 +324,7 @@ contract DistributionService is
329
324
  view
330
325
  returns (IPolicy.Premium memory finalPremium)
331
326
  {
332
- (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
327
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
333
328
  InstanceReader reader = instance.getInstanceReader();
334
329
 
335
330
  // first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
@@ -390,7 +385,7 @@ contract DistributionService is
390
385
 
391
386
  // TODO: zero should return false
392
387
  function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
393
- (address distributionAddress, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
388
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
394
389
  IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
395
390
 
396
391
  if (info.distributorNftId.eqz()) {
@@ -405,63 +400,32 @@ contract DistributionService is
405
400
  internal
406
401
  view
407
402
  returns(
408
- address distributionAddress,
409
403
  NftId distributionNftId,
410
404
  IInstance instance
411
405
  )
412
406
  {
413
- ObjectType objectType;
414
- (
415
- distributionAddress,
416
- distributionNftId,
417
- objectType,
418
- instance
419
- ) = _getAndVerifyCaller();
420
-
421
- if(objectType != DISTRIBUTION()) {
422
- revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
407
+ distributionNftId = getRegistry().getNftId(msg.sender);
408
+ if (distributionNftId.eqz()) {
409
+ revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
423
410
  }
424
- }
425
411
 
426
- function _getAndVerifyDistribution(NftId distributionNftId)
427
- internal
428
- view
429
- returns(
430
- address distributionAddress,
431
- IInstance instance
432
- )
433
- {
434
412
  IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
435
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
436
- if (parentInfo.objectType != INSTANCE()) {
437
- revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
413
+ if(info.objectType != DISTRIBUTION()) {
414
+ revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
438
415
  }
439
- instance = IInstance(parentInfo.objectAddress);
416
+
417
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
418
+ instance = IInstance(instanceAddress);
440
419
  }
441
420
 
442
- function _getAndVerifyCaller()
421
+
422
+ function _getInstanceForDistribution(NftId distributionNftId)
443
423
  internal
444
424
  view
445
- returns(
446
- address objectAddress,
447
- NftId objectNftId,
448
- ObjectType objectType,
449
- IInstance instance
450
- )
425
+ returns(IInstance instance)
451
426
  {
452
- objectAddress = msg.sender;
453
- objectNftId = getRegistry().getNftId(objectAddress);
454
- if ( objectNftId.eqz()) {
455
- revert ErrorIServiceCallerUnknown(objectAddress);
456
- }
457
- IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
458
- objectType = info.objectType;
459
-
460
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
461
- if (parentInfo.objectType != INSTANCE()) {
462
- revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
463
- }
464
- instance = IInstance(parentInfo.objectAddress);
427
+ NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
428
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
429
+ return IInstance(instanceAddress);
465
430
  }
466
-
467
431
  }
@@ -2,24 +2,20 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IPolicy} from "../module/IPolicy.sol";
5
- import {IRisk} from "../module/IRisk.sol";
6
5
  import {IService} from "../../shared/IService.sol";
7
6
 
8
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {ObjectType} from "../../types/ObjectType.sol";
9
9
  import {ReferralId} from "../../types/Referral.sol";
10
10
  import {RiskId} from "../../types/RiskId.sol";
11
11
  import {Seconds} from "../../types/Seconds.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
12
 
17
13
  /// @dev gif service responsible for creating applications
18
14
  /// only product components may call transaction functions
19
15
  interface IApplicationService is IService {
20
16
 
21
- error IApplicationServicePolicyNotApplied(NftId applicationNftId);
22
- error IApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
17
+ error ErrorApplicationServiceNotProduct(NftId callerNftId, ObjectType callerType);
18
+ error ErrorApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
23
19
 
24
20
  /// @dev creates a new application based on the specified attributes
25
21
  /// may only be called by a product component
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {Amount} from "../../types/Amount.sol";
4
5
  import {NftId} from "../../types/NftId.sol";
5
6
  import {Fee} from "../../types/Fee.sol";
6
7
  import {IService} from "../../shared/IService.sol";
@@ -8,55 +9,88 @@ import {IBundle} from "../module/IBundle.sol";
8
9
  import {IInstance} from "../../instance/IInstance.sol";
9
10
  import {Seconds} from "../../types/Seconds.sol";
10
11
  import {StateId} from "../../types/StateId.sol";
12
+ import {Timestamp} from "../../types/Timestamp.sol";
11
13
 
12
14
  interface IBundleService is IService {
13
15
 
14
16
  event LogBundleServiceBundleActivated(NftId bundleNftId);
15
17
  event LogBundleServiceBundleLocked(NftId bundleNftId);
16
- event LogBundleServiceBundleClosed(NftId bundleNftId);
17
18
 
18
19
  error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
19
- error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state);
20
+ error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state, Timestamp expiredAt);
21
+ error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId, uint capacityAmount, uint collateralAmount);
20
22
  error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
21
23
 
24
+ error ErrorBundleServiceBundleUnknown(NftId bundleNftId);
25
+ error ErrorBundleServiceBundlePoolMismatch(NftId expectedPoolNftId, NftId bundlePoolNftId);
26
+
27
+ /// @dev create a new bundle for the specified attributes
28
+ /// may only be called by pool service
22
29
  function create(
23
- address owner,
24
- Fee memory fee,
25
- uint256 amount,
26
- Seconds lifetime,
27
- bytes calldata filter
28
- ) external returns(NftId bundleNftId);
30
+ IInstance instance, // instance relevant for bundle
31
+ NftId poolNftId, // the pool the bundle will be linked to
32
+ address owner, // initial bundle owner
33
+ Fee memory fee, // fees deducted from premium that go to bundle owner
34
+ Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
35
+ Seconds lifetime, // initial duration for which new policies are covered
36
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
37
+ )
38
+ external
39
+ returns(NftId bundleNftId); // the nft id of the newly created bundle
40
+
41
+ /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
42
+ /// only active bundles may be locked
43
+ /// may only be called by registered and unlocked pool components
44
+ function lock(NftId bundleNftId) external;
45
+
46
+ /// @dev activates the specified bundle
47
+ /// only locked bundles may be unlocked
48
+ /// may only be called by registered and unlocked pool components
49
+ function unlock(NftId bundleNftId) external;
29
50
 
51
+ /// @dev closes the specified bundle
52
+ /// only open bundles (active or locked) may be closed
53
+ /// to close a bundle it may not have any non-closed polices attached to it
54
+ /// may only be called by registered and unlocked pool components
55
+ function close(
56
+ IInstance instance,
57
+ NftId bundleNftId
58
+ ) external;
30
59
 
60
+ /// @dev set bundle fee to provided value
61
+ /// may only be called by registered and unlocked pool components
31
62
  function setFee(
32
63
  NftId bundleNftId,
33
64
  Fee memory fee
34
65
  ) external;
35
66
 
36
67
 
68
+ /// @dev locks the specified collateral in the bundle
69
+ /// the locked collateral is added to the bundle locked capital
70
+ /// the bundles' fees are updated with the fees for this premium
71
+ /// the premium (minus bundle fee) is added to the bundle capital
72
+ /// may only be called by pool service
37
73
  function lockCollateral(
38
74
  IInstance instanceNftId,
39
75
  NftId policyNftId,
40
76
  NftId bundleNftId,
41
77
  uint256 collateralAmount,
42
- uint256 netPremium
43
- )
44
- external
45
- returns (
46
- IBundle.BundleInfo memory bundleInfo
47
- );
78
+ uint256 premium // premium amount after pool fee
79
+ ) external;
48
80
 
49
- function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
50
81
 
51
- function closePolicy(IInstance instance, NftId policyNftId, NftId bundleNftId, uint256 collateralAmount) external;
82
+ /// @dev releases the specified collateral in the bundle
83
+ /// may only be called by pool service
84
+ function releaseCollateral(
85
+ IInstance instance,
86
+ NftId policyNftId,
87
+ NftId bundleNftId,
88
+ uint256 collateralAmount
89
+ ) external;
90
+
91
+ function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
52
92
 
53
93
  // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
54
94
 
55
95
  // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
56
-
57
- function lock(NftId bundleNftId) external;
58
-
59
- function unlock(NftId bundleNftId) external;
60
-
61
- function close(NftId bundleNftId) external;
62
96
  }
@@ -1,14 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IRisk} from "../module/IRisk.sol";
4
+ import {IInstance} from "../IInstance.sol";
5
+ import {InstanceReader} from "../InstanceReader.sol";
5
6
  import {IService} from "../../shared/IService.sol";
6
7
 
8
+ import {Amount} from "../../types/Amount.sol";
7
9
  import {ClaimId} from "../../types/ClaimId.sol";
8
10
  import {PayoutId} from "../../types/PayoutId.sol";
9
11
  import {NftId} from "../../types/NftId.sol";
10
- import {ReferralId} from "../../types/Referral.sol";
11
- import {RiskId} from "../../types/RiskId.sol";
12
12
  import {StateId} from "../../types/StateId.sol";
13
13
  import {Timestamp} from "../../types/Timestamp.sol";
14
14
  import {UFixed} from "../../types/UFixed.sol";
@@ -20,42 +20,73 @@ interface IClaimService is
20
20
  IService
21
21
  {
22
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
+
23
27
  /// @dev create a new claim for the specified policy
24
28
  /// function can only be called by product, policy needs to match with calling product
25
- function createClaim(
29
+ function submit(
30
+ IInstance instance,
26
31
  NftId policyNftId,
27
- uint256 claimAmount,
32
+ ClaimId claimId,
33
+ Amount claimAmount,
28
34
  bytes memory claimData
29
- ) external returns (ClaimId);
35
+ ) external;
30
36
 
31
37
  /// @dev confirms the specified claim and fixes the final claim amount
32
38
  /// function can only be called by product, policy needs to match with calling product
33
- function confirmClaim(NftId policyNftId, ClaimId claimId, uint256 claimAmount) external;
39
+ function confirm(
40
+ IInstance instance,
41
+ InstanceReader instanceReader,
42
+ NftId policyNftId,
43
+ ClaimId claimId,
44
+ Amount claimAmount
45
+ ) external;
34
46
 
35
47
  /// @dev declares the claim as invalid, no payout(s) will be made
36
48
  /// function can only be called by product, policy needs to match with calling product
37
- function declineClaim(NftId policyNftId, ClaimId claimId) external;
49
+ function decline(
50
+ IInstance instance,
51
+ InstanceReader instanceReader,
52
+ NftId policyNftId,
53
+ ClaimId claimId
54
+ ) external;
38
55
 
39
56
  /// @dev closes the claim
40
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
41
58
  /// function can only be called by product, policy needs to match with calling product
42
- function closeClaim(NftId policyNftId, ClaimId claimId) external;
59
+ function close(
60
+ IInstance instance,
61
+ InstanceReader instanceReader,
62
+ NftId policyNftId,
63
+ ClaimId claimId
64
+ ) external;
43
65
 
44
- /// @dev create a new payout for the specified policy and claim
66
+ /// @dev create a new payout for the specified policy
67
+ /// payoutId may be constructed using PayoutIdLib(claimId, payoutNo)
45
68
  /// function can only be called by product, policy needs to match with calling product
46
69
  function createPayout(
70
+ IInstance instance,
47
71
  NftId policyNftId,
48
- ClaimId claimId,
49
- uint256 payoutAmount,
72
+ PayoutId payoutId,
73
+ Amount payoutAmount,
50
74
  bytes calldata payoutData
51
- ) external returns (PayoutId payoutId);
75
+ ) external;
52
76
 
53
77
  /// @dev callback function to confirm transfer of payout token to beneficiary
54
78
  /// allows claim service to update claims/payout book keeping
55
79
  /// only pool service can confirm executed payout
56
- function payoutExecuted(
80
+ function processPayout(
81
+ IInstance instance,
82
+ InstanceReader instanceReader,
57
83
  NftId policyNftId,
58
84
  PayoutId payoutId
59
- ) external;
85
+ )
86
+ external
87
+ returns (
88
+ Amount amount,
89
+ bool payoutIsClosingClaim
90
+ );
60
91
 
61
92
  }
@@ -12,6 +12,7 @@ import {Timestamp} from "../../types/Timestamp.sol";
12
12
 
13
13
 
14
14
  interface IDistributionService is IService {
15
+ error ErrorDistributionServiceCallerNotRegistered(address caller);
15
16
  error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
16
17
  error ErrorIDistributionServiceCallerNotDistributor(address caller);
17
18
  error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
@@ -4,7 +4,10 @@ pragma solidity ^0.8.19;
4
4
  import {IRisk} from "../module/IRisk.sol";
5
5
  import {IService} from "../../shared/IService.sol";
6
6
 
7
+ import {Amount} from "../../types/Amount.sol";
8
+ import {ClaimId} from "../../types/ClaimId.sol";
7
9
  import {NftId} from "../../types/NftId.sol";
10
+ import {PayoutId} from "../../types/PayoutId.sol";
8
11
  import {ReferralId} from "../../types/Referral.sol";
9
12
  import {RiskId} from "../../types/RiskId.sol";
10
13
  import {Seconds} from "../../types/Seconds.sol";
@@ -14,7 +17,19 @@ import {UFixed} from "../../types/UFixed.sol";
14
17
  import {Fee} from "../../types/Fee.sol";
15
18
 
16
19
  interface IPolicyService is IService {
17
-
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
+
18
33
  error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
19
34
  error ErrorIPolicyServicePremiumAlreadyPaid(NftId policyNftId, uint256 premiumPaidAmount);
20
35
  error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
@@ -24,22 +39,22 @@ interface IPolicyService is IService {
24
39
  error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
25
40
  error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
26
41
 
27
- error ErrorIPolicyServicePremiumMismatch(NftId policyNftId, uint256 premiumAmount, uint256 recalculatedPremiumAmount);
42
+ error ErrorIPolicyServicePremiumMismatch(NftId policyNftId, uint256 expectedPremiumAmount, uint256 recalculatedPremiumAmount);
28
43
 
29
44
  /// @dev declines an application represented by {policyNftId}
30
45
  /// an application can only be declined in applied state
31
46
  /// only the related product may decline an application
32
47
  function decline(NftId policyNftId) external;
33
48
 
34
- /// @dev underwrites the policy represented by {policyNftId}
49
+ /// @dev collateralizes the policy represented by {policyNftId}
35
50
  /// sets the policy state to underwritten
36
51
  /// may set the policy state to activated and set the activation date
37
52
  /// optionally collects premiums and activates the policy.
38
53
  /// - premium payment is only attempted if requirePremiumPayment is set to true
39
54
  /// - activation is only done if activateAt is a non-zero timestamp
40
55
  /// an application can only be underwritten in applied state
41
- /// only the related product may underwrite an application
42
- function underwrite(
56
+ /// only the related product may collateralize an application
57
+ function collateralize(
43
58
  NftId policyNftId,
44
59
  bool requirePremiumPayment,
45
60
  Timestamp activateAt
@@ -63,6 +78,56 @@ interface IPolicyService is IService {
63
78
  /// this function can only be called by a product. the policy needs to match with the calling product
64
79
  function close(NftId policyNftId) external;
65
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
+
66
131
  // TODO move function to pool service
67
132
  function calculateRequiredCollateral(
68
133
  UFixed collateralizationLevel,