@etherisc/gif-next 0.0.2-d3ee0cc-268 → 0.0.2-d408403-475

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 (217) hide show
  1. package/README.md +38 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
  5. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
  8. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +131 -0
  10. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +109 -18
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +194 -3
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +160 -21
  16. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  28. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +592 -451
  36. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  37. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.json +735 -506
  39. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +50 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +50 -0
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +41 -23
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  52. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
  53. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +55 -54
  59. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +56 -55
  62. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +22 -93
  64. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +22 -93
  67. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  68. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  69. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  70. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensation.json → distribution/IDistribution.sol/IDistribution.json} +2 -2
  71. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  72. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensationModule.json → distribution/IDistribution.sol/IDistributionModule.json} +2 -2
  73. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +61 -38
  76. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +61 -38
  78. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -5
  81. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -5
  83. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +104 -1
  86. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +126 -5
  88. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +209 -231
  91. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  92. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  93. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  94. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +209 -231
  95. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +55 -15
  97. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +420 -0
  99. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +325 -0
  102. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +64 -0
  104. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +160 -7
  106. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +84 -12
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +216 -31
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  118. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  122. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  123. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  124. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  125. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  126. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  127. package/artifacts/contracts/test/TestPool.sol/TestPool.json +194 -3
  128. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  129. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +209 -27
  130. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  131. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  132. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  133. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +38 -4
  134. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  135. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  136. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  137. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  139. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  140. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  141. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  142. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  143. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  144. package/artifacts/contracts/types/Fee.sol/FeeLib.json +50 -11
  145. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  146. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  147. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  149. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  150. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  151. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  153. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  154. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  155. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  156. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  157. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  158. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  159. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  164. package/contracts/components/BaseComponent.sol +7 -1
  165. package/contracts/components/Distribution.sol +132 -0
  166. package/contracts/components/IDistributionComponent.sol +48 -0
  167. package/contracts/components/IPoolComponent.sol +14 -0
  168. package/contracts/components/IProductComponent.sol +24 -5
  169. package/contracts/components/Pool.sol +64 -3
  170. package/contracts/components/Product.sol +123 -13
  171. package/contracts/instance/IInstance.sol +7 -6
  172. package/contracts/instance/Instance.sol +12 -6
  173. package/contracts/instance/base/IInstanceBase.sol +8 -0
  174. package/contracts/instance/base/IKeyValueStore.sol +4 -3
  175. package/contracts/instance/base/InstanceBase.sol +13 -2
  176. package/contracts/instance/base/KeyValueStore.sol +12 -7
  177. package/contracts/instance/base/Lifecycle.sol +15 -10
  178. package/contracts/instance/base/ModuleBase.sol +22 -17
  179. package/contracts/instance/module/access/Access.sol +6 -6
  180. package/contracts/instance/module/bundle/BundleModule.sol +10 -12
  181. package/contracts/instance/module/bundle/IBundle.sol +6 -11
  182. package/contracts/instance/module/component/ComponentModule.sol +29 -54
  183. package/contracts/instance/module/component/IComponent.sol +5 -30
  184. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  185. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  186. package/contracts/instance/module/policy/IPolicy.sol +12 -9
  187. package/contracts/instance/module/policy/PolicyModule.sol +35 -20
  188. package/contracts/instance/module/pool/IPoolModule.sol +0 -1
  189. package/contracts/instance/module/pool/PoolModule.sol +12 -9
  190. package/contracts/instance/module/risk/IRisk.sol +18 -2
  191. package/contracts/instance/module/risk/RiskModule.sol +56 -2
  192. package/contracts/instance/module/treasury/ITreasury.sol +29 -50
  193. package/contracts/instance/module/treasury/TreasuryModule.sol +71 -85
  194. package/contracts/instance/service/ComponentOwnerService.sol +29 -42
  195. package/contracts/instance/service/DistributionService.sol +59 -0
  196. package/contracts/instance/service/IDistributionService.sol +12 -0
  197. package/contracts/instance/service/IPoolService.sol +7 -0
  198. package/contracts/instance/service/IProductService.sol +56 -7
  199. package/contracts/instance/service/PoolService.sol +30 -4
  200. package/contracts/instance/service/ProductService.sol +230 -75
  201. package/contracts/registry/Registry.sol +3 -2
  202. package/contracts/test/TestDistribution.sol +21 -0
  203. package/contracts/test/TestPool.sol +5 -2
  204. package/contracts/test/TestProduct.sol +35 -7
  205. package/contracts/test/TestRoleId.sol +2 -2
  206. package/contracts/types/Fee.sol +8 -3
  207. package/contracts/types/ObjectType.sol +24 -8
  208. package/contracts/types/ReferralId.sol +48 -0
  209. package/contracts/types/RiskId.sol +43 -0
  210. package/contracts/types/RoleId.sol +12 -10
  211. package/package.json +1 -1
  212. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  213. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  214. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  215. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  216. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  217. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IDistributionModule} from "./IDistribution.sol";
5
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
+ import {ModuleBase} from "../../base/ModuleBase.sol";
7
+
8
+ contract DistributionModule is
9
+ ModuleBase,
10
+ IDistributionModule
11
+ {
12
+
13
+ function initializeDistributionModule(IKeyValueStore keyValueStore) internal {
14
+ _initialize(keyValueStore);
15
+ }
16
+
17
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ interface IDistribution {
5
+
6
+ }
7
+
8
+ interface IDistributionModule is IDistribution {
9
+
10
+ }
@@ -5,42 +5,45 @@ import {IRegistry} from "../../../registry/IRegistry.sol";
5
5
  import {IInstance} from "../../IInstance.sol";
6
6
  import {IProductService} from "../../service/IProductService.sol";
7
7
  import {NftId} from "../../../types/NftId.sol";
8
+ import {ReferralId} from "../../../types/ReferralId.sol";
9
+ import {RiskId} from "../../../types/RiskId.sol";
8
10
  import {StateId} from "../../../types/StateId.sol";
9
11
  import {Timestamp} from "../../../types/Timestamp.sol";
10
- import {Blocknumber} from "../../../types/Blocknumber.sol";
11
12
 
12
13
  // TODO check if there is value to introuce IContract and let IPolicy derive from IContract
13
14
  interface IPolicy {
14
15
  struct PolicyInfo {
15
- NftId nftId;
16
16
  NftId productNftId;
17
17
  NftId bundleNftId;
18
+ ReferralId referralId;
18
19
  address beneficiary;
19
- StateId state; // applied, withdrawn, rejected, active, closed
20
+ RiskId riskId;
20
21
  uint256 sumInsuredAmount;
21
22
  uint256 premiumAmount;
22
23
  uint256 premiumPaidAmount;
23
24
  uint256 lifetime;
24
- bytes data;
25
- Timestamp createdAt;
25
+ bytes applicationData;
26
+ bytes policyData;
26
27
  Timestamp activatedAt; // time of underwriting
27
28
  Timestamp expiredAt; // no new claims (activatedAt + lifetime)
28
29
  Timestamp closedAt; // no locked capital
29
- Blocknumber updatedIn; // write log entries in a way to support backtracking of all state changes
30
30
  }
31
31
  }
32
32
 
33
33
  interface IPolicyModule is IPolicy {
34
- function createApplication(
35
- NftId productNftId,
34
+ function createPolicyInfo(
36
35
  NftId policyNftId,
36
+ NftId productNftId,
37
+ ReferralId referralId,
38
+ RiskId riskId,
37
39
  uint256 sumInsuredAmount,
38
40
  uint256 premiumAmount,
39
41
  uint256 lifetime,
40
42
  NftId bundleNftId
41
43
  ) external;
42
44
 
43
- function setPolicyInfo(PolicyInfo memory policyInfo) external;
45
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info) external;
46
+ function updatePolicyState(NftId nftId, StateId state) external;
44
47
 
45
48
  // function underwrite(NftId nftId) external;
46
49
 
@@ -6,15 +6,19 @@ import {IRegistry} from "../../../registry/IRegistry.sol";
6
6
  import {IProductService} from "../../service/IProductService.sol";
7
7
  import {IPolicy, IPolicyModule} from "./IPolicy.sol";
8
8
  import {ObjectType, POLICY} from "../../../types/ObjectType.sol";
9
- import {APPLIED, ACTIVE, UNDERWRITTEN} from "../../../types/StateId.sol";
10
9
  import {NftId, NftIdLib} from "../../../types/NftId.sol";
10
+ import {ReferralId} from "../../../types/ReferralId.sol";
11
+ import {RiskId} from "../../../types/RiskId.sol";
12
+ import {StateId} from "../../../types/StateId.sol";
11
13
  import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
12
- import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
13
14
 
14
- abstract contract PolicyModule is IPolicyModule {
15
- using NftIdLib for NftId;
15
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
16
+ import {ModuleBase} from "../../base/ModuleBase.sol";
16
17
 
17
- mapping(NftId nftId => PolicyInfo info) private _policyInfo;
18
+ abstract contract PolicyModule is
19
+ ModuleBase,
20
+ IPolicyModule
21
+ {
18
22
 
19
23
  // TODO find a better place to avoid dupliation
20
24
  modifier onlyProductService2() {
@@ -25,9 +29,15 @@ abstract contract PolicyModule is IPolicyModule {
25
29
  _;
26
30
  }
27
31
 
28
- function createApplication(
29
- NftId productNftId,
32
+ function initializePolicyModule(IKeyValueStore keyValueStore) internal {
33
+ _initialize(keyValueStore);
34
+ }
35
+
36
+ function createPolicyInfo(
30
37
  NftId policyNftId,
38
+ NftId productNftId,
39
+ ReferralId referralId,
40
+ RiskId riskId,
31
41
  uint256 sumInsuredAmount,
32
42
  uint256 premiumAmount,
33
43
  uint256 lifetime,
@@ -37,40 +47,45 @@ abstract contract PolicyModule is IPolicyModule {
37
47
  onlyProductService2
38
48
  override
39
49
  {
40
- _policyInfo[policyNftId] = PolicyInfo(
41
- policyNftId,
50
+ PolicyInfo memory info = PolicyInfo(
42
51
  productNftId,
43
52
  bundleNftId,
53
+ referralId,
44
54
  address(0), // beneficiary = policy nft holder
45
- // _lifecycleModule.getInitialState(POLICY()),
46
- APPLIED(),
55
+ riskId,
47
56
  sumInsuredAmount,
48
57
  premiumAmount,
49
58
  0, // premium paid amount
50
59
  lifetime,
51
- "", // data
52
- blockTimestamp(), // createdAt
60
+ "", // applicationData
61
+ "", // policyData
53
62
  zeroTimestamp(), // activatedAt
54
63
  zeroTimestamp(), // expiredAt
55
- zeroTimestamp(), // closedAt
56
- blockNumber() // updatedIn
64
+ zeroTimestamp() // closedAt
57
65
  );
58
66
 
59
- // TODO add logging
67
+ _create(POLICY(), policyNftId, abi.encode(info));
60
68
  }
61
69
 
62
- function setPolicyInfo(PolicyInfo memory policyInfo)
70
+ function setPolicyInfo(NftId policyNftId, PolicyInfo memory info)
63
71
  external
64
72
  override
65
73
  onlyProductService2
66
74
  {
67
- _policyInfo[policyInfo.nftId] = policyInfo;
75
+ _updateData(POLICY(), policyNftId, abi.encode(info));
76
+ }
77
+
78
+ function updatePolicyState(NftId bundleNftId, StateId state)
79
+ external
80
+ override
81
+ onlyProductService2
82
+ {
83
+ _updateState(POLICY(), bundleNftId, state);
68
84
  }
69
85
 
70
86
  function getPolicyInfo(
71
87
  NftId nftId
72
88
  ) external view returns (PolicyInfo memory info) {
73
- return _policyInfo[nftId];
89
+ return abi.decode(_getData(POLICY(), nftId), (PolicyInfo));
74
90
  }
75
-
76
91
  }
@@ -9,7 +9,6 @@ import {IPoolService} from "../../service/IPoolService.sol";
9
9
 
10
10
  interface IPool {
11
11
  struct PoolInfo {
12
- NftId nftId;
13
12
  bool isVerifying;
14
13
  UFixed collateralizationLevel;
15
14
  }
@@ -8,18 +8,22 @@ import {IPolicy, IPolicyModule} from "../../module/policy/IPolicy.sol";
8
8
  import {ITreasuryModule} from "../../module/treasury/ITreasury.sol";
9
9
 
10
10
  import {NftId} from "../../../types/NftId.sol";
11
+ import {POOL} from "../../../types/ObjectType.sol";
11
12
  import {LibNftIdSet} from "../../../types/NftIdSet.sol";
12
13
  import {StateId, APPLIED} from "../../../types/StateId.sol";
13
14
  import {UFixed} from "../../../types/UFixed.sol";
14
15
 
16
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
15
17
  import {IPoolModule} from "./IPoolModule.sol";
18
+ import {ModuleBase} from "../../base/ModuleBase.sol";
16
19
 
17
20
  abstract contract PoolModule is
21
+ ModuleBase,
18
22
  IPoolModule
19
23
  {
20
24
  using LibNftIdSet for LibNftIdSet.Set;
21
25
 
22
- mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
26
+ // mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
23
27
  mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
24
28
 
25
29
  modifier poolServiceCallingPool() {
@@ -30,6 +34,10 @@ abstract contract PoolModule is
30
34
  _;
31
35
  }
32
36
 
37
+ function initializePoolModule(IKeyValueStore keyValueStore) internal {
38
+ _initialize(keyValueStore);
39
+ }
40
+
33
41
  function registerPool(
34
42
  NftId nftId,
35
43
  bool isVerifying,
@@ -38,17 +46,12 @@ abstract contract PoolModule is
38
46
  public
39
47
  override
40
48
  {
41
- require(
42
- _poolInfo[nftId].nftId.eqz(),
43
- "ERROR:PL-010:ALREADY_CREATED");
44
-
45
- _poolInfo[nftId] = PoolInfo(
46
- nftId,
49
+ PoolInfo memory info = PoolInfo(
47
50
  isVerifying,
48
51
  collateralizationRate
49
52
  );
50
53
 
51
- // TODO add logging
54
+ _create(POOL(), nftId, abi.encode(info));
52
55
  }
53
56
 
54
57
  function addBundleToPool(
@@ -71,7 +74,7 @@ abstract contract PoolModule is
71
74
  function getPoolInfo(
72
75
  NftId nftId
73
76
  ) external view override returns (PoolInfo memory info) {
74
- info = _poolInfo[nftId];
77
+ return abi.decode(_getData(POOL(), nftId), (PoolInfo));
75
78
  }
76
79
 
77
80
 
@@ -1,10 +1,26 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- interface IRisk {
4
+ import {NftId} from "../../../types/NftId.sol";
5
+ import {RiskId} from "../../../types/RiskId.sol";
6
+ import {StateId} from "../../../types/StateId.sol";
5
7
 
8
+ interface IRisk {
9
+ struct RiskInfo {
10
+ NftId productNftId;
11
+ bytes data;
12
+ }
6
13
  }
7
14
 
8
15
  interface IRiskModule is IRisk {
9
-
16
+ function createRisk(
17
+ RiskId riskId,
18
+ NftId productNftId,
19
+ bytes memory data
20
+ ) external;
21
+
22
+ function setRiskInfo(RiskId riskId, RiskInfo memory info) external;
23
+ function updateRiskState(RiskId riskId, StateId state) external;
24
+
25
+ function getRiskInfo(RiskId riskId) external view returns (RiskInfo memory info);
10
26
  }
@@ -1,8 +1,62 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {NftId} from "../../../types/NftId.sol";
5
+ import {RISK} from "../../../types/ObjectType.sol";
6
+ import {RiskId} from "../../../types/RiskId.sol";
7
+ import {StateId} from "../../../types/StateId.sol";
8
+
9
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
4
10
  import {IRiskModule} from "./IRisk.sol";
11
+ import {ModuleBase} from "../../base/ModuleBase.sol";
12
+
13
+ contract RiskModule is
14
+ ModuleBase,
15
+ IRiskModule
16
+ {
17
+ function initializeRiskModule(IKeyValueStore keyValueStore) internal {
18
+ _initialize(keyValueStore);
19
+ }
20
+
21
+ function createRisk(
22
+ RiskId riskId,
23
+ NftId productNftId,
24
+ bytes memory data
25
+ ) external override {
26
+ RiskInfo memory info = RiskInfo(
27
+ productNftId,
28
+ data
29
+ );
30
+
31
+ _create(RISK(), riskId.toKey32(), abi.encode(info));
32
+ }
33
+
34
+ function setRiskInfo(
35
+ RiskId riskId,
36
+ RiskInfo memory info
37
+ )
38
+ external
39
+ override
40
+ {
41
+
42
+ }
43
+
44
+ function updateRiskState(
45
+ RiskId riskId,
46
+ StateId state
47
+ )
48
+ external
49
+ override
50
+ {
51
+
52
+ }
53
+
54
+ function getRiskInfo(RiskId riskId)
55
+ external
56
+ view
57
+ override
58
+ returns (RiskInfo memory info)
59
+ {
5
60
 
6
- contract RiskModule is IRiskModule {
7
-
61
+ }
8
62
  }
@@ -2,6 +2,9 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
6
+ import {IPoolComponent} from "../../../components/IPoolComponent.sol";
7
+ import {IProductComponent} from "../../../components/IProductComponent.sol";
5
8
 
6
9
  import {NftId} from "../../../types/NftId.sol";
7
10
  import {UFixed} from "../../../types/UFixed.sol";
@@ -13,73 +16,49 @@ interface ITreasury {
13
16
  // TODO add events
14
17
  // TODO add errors
15
18
 
16
- struct ProductSetup {
17
- NftId productNftId;
18
- NftId distributorNftId;
19
+ // treasury info is linked to product nft id
20
+ struct TreasuryInfo {
19
21
  NftId poolNftId;
22
+ NftId distributionNftId;
20
23
  IERC20Metadata token;
21
- address wallet;
22
- Fee policyFee;
23
- Fee processingFee;
24
- }
25
-
26
- struct DistributorSetup {
27
- NftId distributorNftId;
28
- address wallet;
29
- Fee commissionFee;
30
- }
31
-
32
- struct PoolSetup {
33
- NftId poolNftId;
34
- address wallet;
35
- Fee stakingFee;
36
- Fee performanceFee;
24
+ Fee productFee; // product fee on net premium
25
+ Fee processingFee; // product fee on payout amounts
26
+ Fee poolFee; // pool fee on net premium
27
+ Fee stakingFee; // pool fee on staked capital from investor
28
+ Fee performanceFee; // pool fee on profits from capital investors
29
+ Fee distributionFee; // default distribution fee (no referral id)
37
30
  }
38
31
  }
39
32
 
40
33
  interface ITreasuryModule is ITreasury {
41
34
 
42
- function registerProduct(
43
- NftId productNftId,
44
- NftId distributorNftId,
45
- NftId poolNftId,
46
- IERC20Metadata token,
47
- address wallet,
48
- Fee memory policyFee,
49
- Fee memory processingFee
35
+ function registerProductSetup(
36
+ IProductComponent product,
37
+ IPoolComponent pool,
38
+ IDistributionComponent distribution
50
39
  ) external;
51
40
 
52
- function setProductFees(
41
+ function setTreasuryInfo(
53
42
  NftId productNftId,
54
- Fee memory policyFee,
55
- Fee memory processingFee
43
+ TreasuryInfo memory info
56
44
  ) external;
57
45
 
58
- function registerPool(
59
- NftId poolNftId,
60
- address wallet,
61
- Fee memory stakingFee,
62
- Fee memory performanceFee
63
- ) external;
46
+ function hasTreasuryInfo(
47
+ NftId productNftId
48
+ ) external view returns (bool hasInfo);
64
49
 
65
- function setPoolFees(
66
- NftId poolNftId,
67
- Fee memory stakingFee,
68
- Fee memory performanceFee
69
- ) external;
50
+ function getTreasuryInfo(
51
+ NftId productNftId
52
+ ) external view returns (TreasuryInfo memory info);
53
+
54
+ function getProductNftId(
55
+ NftId componentNftId
56
+ ) external view returns (NftId productNftId);
70
57
 
71
58
  function getTokenHandler(
72
59
  NftId componentNftId
73
60
  ) external view returns (TokenHandler tokenHandler);
74
61
 
75
- function getProductSetup(
76
- NftId productNftId
77
- ) external view returns (ProductSetup memory setup);
78
-
79
- function getPoolSetup(
80
- NftId poolNftId
81
- ) external view returns (PoolSetup memory setup);
82
-
83
62
  function calculateFeeAmount(
84
63
  uint256 amount,
85
64
  Fee memory fee
@@ -90,7 +69,7 @@ interface ITreasuryModule is ITreasury {
90
69
  uint256 fixedFee
91
70
  ) external pure returns (Fee memory fee);
92
71
 
93
- function getZeroFee() external pure returns (Fee memory fee);
72
+ function getZeroFee() external view returns (Fee memory fee);
94
73
 
95
74
  function getUFixed(
96
75
  uint256 a
@@ -2,102 +2,88 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
6
+ import {IPoolComponent} from "../../../components/IPoolComponent.sol";
7
+ import {IProductComponent} from "../../../components/IProductComponent.sol";
5
8
 
6
9
  import {NftId} from "../../../types/NftId.sol";
10
+ import {TREASURY} from "../../../types/ObjectType.sol";
7
11
  import {Fee, FeeLib} from "../../../types/Fee.sol";
8
12
  import {UFixed, UFixedMathLib} from "../../../types/UFixed.sol";
9
13
  import {TokenHandler} from "./TokenHandler.sol";
14
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
10
15
  import {ITreasuryModule} from "./ITreasury.sol";
16
+ import {ModuleBase} from "../../base/ModuleBase.sol";
17
+
18
+ abstract contract TreasuryModule is
19
+ ModuleBase,
20
+ ITreasuryModule
21
+ {
22
+ // relation of distributor and pool nft map to product nft
23
+ mapping(NftId componentNftId => NftId productNftId) internal _productNft;
24
+ // relation of component nft to token hanlder
25
+ mapping(NftId componentNftId => TokenHandler tokenHandler) internal _tokenHandler;
26
+ Fee internal _zeroFee;
27
+
28
+
29
+ function initializeTreasuryModule(IKeyValueStore keyValueStore) internal {
30
+ _initialize(keyValueStore);
31
+ _zeroFee = FeeLib.zeroFee();
32
+ }
11
33
 
12
- abstract contract TreasuryModule is ITreasuryModule {
13
- mapping(NftId productNftId => ProductSetup setup) private _productSetup;
14
- mapping(NftId distributorNftId => DistributorSetup setup)
15
- private _distributorSetup;
16
- mapping(NftId poolNftId => PoolSetup setup) private _poolSetup;
17
- mapping(NftId componentNftId => TokenHandler tokenHanlder) _tokenHandler;
18
-
19
- function registerProduct(
20
- NftId productNftId,
21
- NftId distributorNftId,
22
- NftId poolNftId,
23
- IERC20Metadata token,
24
- address wallet,
25
- Fee memory policyFee,
26
- Fee memory processingFee
34
+ function registerProductSetup(
35
+ IProductComponent product,
36
+ IPoolComponent pool,
37
+ IDistributionComponent distribution
27
38
  ) external override // TODO add authz (only component module)
28
39
  {
29
- require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-010:TOKEN_HANDLER_ALREADY_REGISTERED");
30
- require(address(_tokenHandler[poolNftId]) == address(0), "ERROR:TRS-011:TOKEN_HANDLER_ALREADY_REGISTERED");
31
- require(address(_tokenHandler[distributorNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
32
- // TODO add additional validations
40
+ NftId productNftId = product.getNftId();
41
+ NftId poolNftId = pool.getNftId();
42
+ NftId distributionNftId = distribution.getNftId();
43
+
44
+ require(productNftId.gtz(), "ERROR:TRS-010:PRODUCT_UNDEFINED");
45
+ require(poolNftId.gtz(), "ERROR:TRS-011:POOL_UNDEFINED");
46
+
47
+ require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
48
+ require(_productNft[poolNftId].eqz(), "ERROR:TRS-013:POOL_ALREADY_LINKED");
49
+ require(_productNft[distributionNftId].eqz(), "ERROR:TRS-014:COMPENSATION_ALREADY_LINKED");
33
50
 
34
51
  // deploy product specific handler contract
35
- TokenHandler tokenHandler = new TokenHandler(productNftId, address(token));
36
- _tokenHandler[productNftId] = tokenHandler;
37
- _tokenHandler[poolNftId] = tokenHandler;
38
- _tokenHandler[distributorNftId] = tokenHandler;
39
-
40
- // create product setup
41
- _productSetup[productNftId] = ProductSetup(
42
- productNftId,
43
- distributorNftId,
52
+ IERC20Metadata token = product.getToken();
53
+ _tokenHandler[productNftId] = new TokenHandler(productNftId, address(token));
54
+ _productNft[distributionNftId] = productNftId;
55
+ _productNft[poolNftId] = productNftId;
56
+
57
+ TreasuryInfo memory info = TreasuryInfo(
44
58
  poolNftId,
59
+ distributionNftId,
45
60
  token,
46
- wallet,
47
- policyFee,
48
- processingFee
61
+ product.getProductFee(),
62
+ product.getProcessingFee(),
63
+ pool.getPoolFee(),
64
+ pool.getStakingFee(),
65
+ pool.getPerformanceFee(),
66
+ distribution.getDistributionFee()
49
67
  );
50
68
 
51
- // TODO add logging
69
+ _create(TREASURY(), productNftId, abi.encode(info));
52
70
  }
53
71
 
54
- function setProductFees(
72
+ function setTreasuryInfo(
55
73
  NftId productNftId,
56
- Fee memory policyFee,
57
- Fee memory processingFee
58
- ) external override // TODO add authz (only component owner service)
74
+ TreasuryInfo memory info
75
+ )
76
+ external
77
+ // TODO add authz (only component module)
78
+ override
59
79
  {
60
- // TODO add validation
61
-
62
- ProductSetup storage setup = _productSetup[productNftId];
63
- setup.policyFee = policyFee;
64
- setup.processingFee = processingFee;
65
-
66
- // TODO add logging
80
+ _updateData(TREASURY(), productNftId, abi.encode(info));
67
81
  }
68
82
 
69
- function registerPool(
70
- NftId poolNftId,
71
- address wallet,
72
- Fee memory stakingFee,
73
- Fee memory performanceFee
74
- ) external override // TODO add authz (only component module)
75
- {
76
- // TODO add validation
77
-
78
- _poolSetup[poolNftId] = PoolSetup(
79
- poolNftId,
80
- wallet,
81
- stakingFee,
82
- performanceFee
83
- );
84
-
85
- // TODO add logging
86
- }
87
-
88
- function setPoolFees(
89
- NftId poolNftId,
90
- Fee memory stakingFee,
91
- Fee memory performanceFee
92
- ) external override // TODO add authz (only component owner service)
93
- {
94
- // TODO add validation
95
-
96
- PoolSetup storage setup = _poolSetup[poolNftId];
97
- setup.stakingFee = stakingFee;
98
- setup.performanceFee = performanceFee;
99
-
100
- // TODO add logging
83
+ function getProductNftId(
84
+ NftId componentNftId
85
+ ) external view returns (NftId productNftId) {
86
+ return _productNft[componentNftId];
101
87
  }
102
88
 
103
89
  function getTokenHandler(
@@ -106,23 +92,23 @@ abstract contract TreasuryModule is ITreasuryModule {
106
92
  return _tokenHandler[componentNftId];
107
93
  }
108
94
 
109
- function getProductSetup(
95
+ function hasTreasuryInfo(
110
96
  NftId productNftId
111
- ) external view override returns (ProductSetup memory setup) {
112
- return _productSetup[productNftId];
97
+ ) public view override returns (bool hasInfo) {
98
+ return _exists(TREASURY(), productNftId);
113
99
  }
114
100
 
115
- function getPoolSetup(
116
- NftId poolNftId
117
- ) external view override returns (PoolSetup memory setup) {
118
- return _poolSetup[poolNftId];
101
+ function getTreasuryInfo(
102
+ NftId productNftId
103
+ ) public view override returns (TreasuryInfo memory info) {
104
+ return abi.decode(_getData(TREASURY(), productNftId), (TreasuryInfo));
119
105
  }
120
106
 
121
107
  function calculateFeeAmount(
122
108
  uint256 amount,
123
109
  Fee memory fee
124
110
  ) public pure override returns (uint256 feeAmount, uint256 netAmount) {
125
- return FeeLib.calculateFee(amount, fee);
111
+ return FeeLib.calculateFee(fee, amount);
126
112
  }
127
113
 
128
114
  function getFee(
@@ -132,8 +118,8 @@ abstract contract TreasuryModule is ITreasuryModule {
132
118
  return FeeLib.toFee(fractionalFee, fixedFee);
133
119
  }
134
120
 
135
- function getZeroFee() external pure override returns (Fee memory fee) {
136
- return FeeLib.zeroFee();
121
+ function getZeroFee() external view override returns (Fee memory fee) {
122
+ return _zeroFee;
137
123
  }
138
124
 
139
125
  function getUFixed(