@etherisc/gif-next 0.0.2-fc8b370-882 → 0.0.2-fe34d97-357

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 (176) hide show
  1. package/README.md +36 -0
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  4. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  5. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  7. package/artifacts/contracts/components/Pool.sol/Pool.json +72 -4
  8. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  9. package/artifacts/contracts/components/Product.sol/Product.json +46 -3
  10. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  11. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  12. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  13. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  14. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  22. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  28. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +540 -401
  30. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  31. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  32. package/artifacts/contracts/instance/Instance.sol/Instance.json +640 -469
  33. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  34. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +18 -0
  36. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  38. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +18 -0
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +41 -23
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  46. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +17 -48
  53. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +18 -49
  56. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +2 -2
  58. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +36 -88
  62. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +36 -88
  65. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +65 -38
  68. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +65 -38
  70. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -5
  73. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -5
  75. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +123 -1
  78. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +145 -5
  80. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +166 -168
  83. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  85. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +167 -169
  87. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +21 -21
  89. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -0
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +6 -6
  95. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +97 -26
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  100. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  101. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  103. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  104. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  105. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  106. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  107. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  108. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  109. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  110. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  111. package/artifacts/contracts/test/TestPool.sol/TestPool.json +72 -4
  112. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  113. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +90 -4
  114. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  115. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  116. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  117. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  118. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  119. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  120. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  121. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  122. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  123. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  124. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  125. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  126. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  127. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  128. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  129. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  130. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  131. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  132. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  133. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  134. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  135. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  136. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  137. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  138. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  139. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  140. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  141. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  142. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  143. package/contracts/components/BaseComponent.sol +7 -1
  144. package/contracts/components/Pool.sol +20 -3
  145. package/contracts/components/Product.sol +69 -5
  146. package/contracts/instance/IInstance.sol +3 -4
  147. package/contracts/instance/Instance.sol +7 -4
  148. package/contracts/instance/base/IInstanceBase.sol +5 -0
  149. package/contracts/instance/base/IKeyValueStore.sol +4 -3
  150. package/contracts/instance/base/InstanceBase.sol +6 -2
  151. package/contracts/instance/base/KeyValueStore.sol +12 -7
  152. package/contracts/instance/base/Lifecycle.sol +15 -10
  153. package/contracts/instance/base/ModuleBase.sol +18 -17
  154. package/contracts/instance/module/bundle/BundleModule.sol +10 -11
  155. package/contracts/instance/module/bundle/IBundle.sol +4 -11
  156. package/contracts/instance/module/compensation/CompensationModule.sol +11 -2
  157. package/contracts/instance/module/component/ComponentModule.sol +39 -53
  158. package/contracts/instance/module/component/IComponent.sol +6 -30
  159. package/contracts/instance/module/policy/IPolicy.sol +11 -9
  160. package/contracts/instance/module/policy/PolicyModule.sol +35 -19
  161. package/contracts/instance/module/pool/IPoolModule.sol +0 -1
  162. package/contracts/instance/module/pool/PoolModule.sol +12 -9
  163. package/contracts/instance/module/risk/IRisk.sol +19 -2
  164. package/contracts/instance/module/risk/RiskModule.sol +64 -2
  165. package/contracts/instance/module/treasury/ITreasury.sol +35 -42
  166. package/contracts/instance/module/treasury/TreasuryModule.sol +96 -77
  167. package/contracts/instance/service/ComponentOwnerService.sol +19 -34
  168. package/contracts/instance/service/IProductService.sol +21 -1
  169. package/contracts/instance/service/PoolService.sol +10 -4
  170. package/contracts/instance/service/ProductService.sol +120 -68
  171. package/contracts/registry/Registry.sol +2 -2
  172. package/contracts/test/TestPool.sol +4 -2
  173. package/contracts/test/TestProduct.sol +25 -3
  174. package/contracts/types/ObjectType.sol +20 -8
  175. package/contracts/types/RiskId.sol +43 -0
  176. package/package.json +1 -1
@@ -13,25 +13,14 @@ interface ITreasury {
13
13
  // TODO add events
14
14
  // TODO add errors
15
15
 
16
- struct ProductSetup {
17
- NftId productNftId;
18
- NftId distributorNftId;
16
+ // treasury info is linked to product nft id
17
+ struct TreasuryInfo {
18
+ NftId compensationNftId;
19
19
  NftId poolNftId;
20
20
  IERC20Metadata token;
21
- address wallet;
21
+ Fee commissionFee;
22
22
  Fee policyFee;
23
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
24
  Fee stakingFee;
36
25
  Fee performanceFee;
37
26
  }
@@ -39,47 +28,51 @@ interface ITreasury {
39
28
 
40
29
  interface ITreasuryModule is ITreasury {
41
30
 
42
- function registerProduct(
31
+ function registerProductSetup(
43
32
  NftId productNftId,
44
33
  NftId distributorNftId,
45
34
  NftId poolNftId,
46
35
  IERC20Metadata token,
47
- address wallet,
48
- Fee memory policyFee,
49
- Fee memory processingFee
50
- ) external;
51
-
52
- function setProductFees(
53
- NftId productNftId,
54
36
  Fee memory policyFee,
55
- Fee memory processingFee
56
- ) external;
57
-
58
- function registerPool(
59
- NftId poolNftId,
60
- address wallet,
37
+ Fee memory processingFee,
61
38
  Fee memory stakingFee,
62
39
  Fee memory performanceFee
63
40
  ) external;
64
41
 
65
- function setPoolFees(
66
- NftId poolNftId,
67
- Fee memory stakingFee,
68
- Fee memory performanceFee
42
+ function setTreasuryInfo(
43
+ NftId productNftId,
44
+ TreasuryInfo memory info
69
45
  ) external;
70
46
 
47
+ function getTreasuryInfo(
48
+ NftId productNftId
49
+ ) external view returns (TreasuryInfo memory info);
50
+
51
+ // function setProductFees(
52
+ // NftId productNftId,
53
+ // Fee memory policyFee,
54
+ // Fee memory processingFee
55
+ // ) external;
56
+
57
+ // function setCompensationFees(
58
+ // NftId poolNftId,
59
+ // Fee memory distributionFee
60
+ // ) external;
61
+
62
+ // function setPoolFees(
63
+ // NftId poolNftId,
64
+ // Fee memory stakingFee,
65
+ // Fee memory performanceFee
66
+ // ) external;
67
+
68
+ function getProductNftId(
69
+ NftId componentNftId
70
+ ) external view returns (NftId productNftId);
71
+
71
72
  function getTokenHandler(
72
73
  NftId componentNftId
73
74
  ) external view returns (TokenHandler tokenHandler);
74
75
 
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
76
  function calculateFeeAmount(
84
77
  uint256 amount,
85
78
  Fee memory fee
@@ -90,7 +83,7 @@ interface ITreasuryModule is ITreasury {
90
83
  uint256 fixedFee
91
84
  ) external pure returns (Fee memory fee);
92
85
 
93
- function getZeroFee() external pure returns (Fee memory fee);
86
+ function getZeroFee() external view returns (Fee memory fee);
94
87
 
95
88
  function getUFixed(
96
89
  uint256 a
@@ -4,100 +4,125 @@ pragma solidity ^0.8.19;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {NftId} from "../../../types/NftId.sol";
7
+ import {TREASURY} from "../../../types/ObjectType.sol";
7
8
  import {Fee, FeeLib} from "../../../types/Fee.sol";
8
9
  import {UFixed, UFixedMathLib} from "../../../types/UFixed.sol";
9
10
  import {TokenHandler} from "./TokenHandler.sol";
11
+ import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
10
12
  import {ITreasuryModule} from "./ITreasury.sol";
13
+ import {ModuleBase} from "../../base/ModuleBase.sol";
14
+
15
+ abstract contract TreasuryModule is
16
+ ModuleBase,
17
+ ITreasuryModule
18
+ {
19
+ // relation of distributor and pool nft map to product nft
20
+ mapping(NftId componentNftId => NftId productNftId) internal _productNft;
21
+ // relation of component nft to token hanlder
22
+ mapping(NftId componentNftId => TokenHandler tokenHandler) internal _tokenHandler;
23
+ Fee internal _zeroFee;
24
+
25
+
26
+ function initializeTreasuryModule(IKeyValueStore keyValueStore) internal {
27
+ _initialize(keyValueStore);
28
+ _zeroFee = FeeLib.zeroFee();
29
+ }
11
30
 
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(
31
+ function registerProductSetup(
20
32
  NftId productNftId,
21
- NftId distributorNftId,
33
+ NftId compensationNftId,
22
34
  NftId poolNftId,
23
35
  IERC20Metadata token,
24
- address wallet,
25
36
  Fee memory policyFee,
26
- Fee memory processingFee
37
+ Fee memory processingFee,
38
+ Fee memory stakingFee,
39
+ Fee memory performanceFee
27
40
  ) external override // TODO add authz (only component module)
28
41
  {
29
42
  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
43
+ require(_productNft[compensationNftId].eqz(), "ERROR:TRS-011:COMPENSATION_ALREADY_LINKED");
44
+ require(_productNft[poolNftId].eqz(), "ERROR:TRS-012:POOL_ALREADY_LINKED");
33
45
 
34
46
  // deploy product specific handler contract
35
47
  TokenHandler tokenHandler = new TokenHandler(productNftId, address(token));
36
48
  _tokenHandler[productNftId] = tokenHandler;
37
- _tokenHandler[poolNftId] = tokenHandler;
38
- _tokenHandler[distributorNftId] = tokenHandler;
49
+ _productNft[compensationNftId] = productNftId;
50
+ _productNft[poolNftId] = productNftId;
39
51
 
40
- // create product setup
41
- _productSetup[productNftId] = ProductSetup(
42
- productNftId,
43
- distributorNftId,
52
+ TreasuryInfo memory info = TreasuryInfo(
53
+ compensationNftId,
44
54
  poolNftId,
45
55
  token,
46
- wallet,
56
+ _zeroFee,
47
57
  policyFee,
48
- processingFee
49
- );
50
-
51
- // TODO add logging
52
- }
53
-
54
- function setProductFees(
55
- NftId productNftId,
56
- Fee memory policyFee,
57
- Fee memory processingFee
58
- ) external override // TODO add authz (only component owner service)
59
- {
60
- // TODO add validation
61
-
62
- ProductSetup storage setup = _productSetup[productNftId];
63
- setup.policyFee = policyFee;
64
- setup.processingFee = processingFee;
65
-
66
- // TODO add logging
67
- }
68
-
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,
58
+ processingFee,
81
59
  stakingFee,
82
60
  performanceFee
83
61
  );
84
62
 
85
- // TODO add logging
63
+ _create(TREASURY(), productNftId, abi.encode(info));
86
64
  }
87
65
 
88
- function setPoolFees(
89
- NftId poolNftId,
90
- Fee memory stakingFee,
91
- Fee memory performanceFee
92
- ) external override // TODO add authz (only component owner service)
66
+ function setTreasuryInfo(
67
+ NftId productNftId,
68
+ TreasuryInfo memory info
69
+ )
70
+ external
71
+ // TODO add authz (only component module)
72
+ override
93
73
  {
94
- // TODO add validation
95
-
96
- PoolSetup storage setup = _poolSetup[poolNftId];
97
- setup.stakingFee = stakingFee;
98
- setup.performanceFee = performanceFee;
74
+ _updateData(TREASURY(), productNftId, abi.encode(info));
75
+ }
99
76
 
100
- // TODO add logging
77
+ // function setProductFees(
78
+ // NftId productNftId,
79
+ // Fee memory policyFee,
80
+ // Fee memory processingFee
81
+ // ) external override // TODO add authz (only component owner service)
82
+ // {
83
+ // TreasuryInfo memory info = getTreasuryInfo(productNftId);
84
+ // require(address(info.token) != address(0), "ERROR:TRS-020:NOT_FOUND");
85
+
86
+ // info.policyFee = policyFee;
87
+ // info.processingFee = processingFee;
88
+
89
+ // _updateData(TREASURY(), productNftId, abi.encode(info));
90
+ // }
91
+
92
+ // function setCompensationFees(
93
+ // NftId compensationNftId,
94
+ // Fee memory distributionFee
95
+ // ) external override // TODO add authz (only component owner service)
96
+ // {
97
+ // NftId productNftId = _productNft[compensationNftId];
98
+ // TreasuryInfo memory info = getTreasuryInfo(productNftId);
99
+ // require(address(info.token) != address(0), "ERROR:TRS-030:NOT_FOUND");
100
+
101
+ // info.commissionFee = distributionFee;
102
+
103
+ // _updateData(TREASURY(), productNftId, abi.encode(info));
104
+ // }
105
+
106
+ // function setPoolFees(
107
+ // NftId poolNftId,
108
+ // Fee memory stakingFee,
109
+ // Fee memory performanceFee
110
+ // ) external override // TODO add authz (only component owner service)
111
+ // {
112
+ // NftId productNftId = _productNft[poolNftId];
113
+ // TreasuryInfo memory info = getTreasuryInfo(productNftId);
114
+ // require(address(info.token) != address(0), "ERROR:TRS-040:NOT_FOUND");
115
+
116
+ // info.stakingFee = stakingFee;
117
+ // info.performanceFee = performanceFee;
118
+
119
+ // _updateData(TREASURY(), productNftId, abi.encode(info));
120
+ // }
121
+
122
+ function getProductNftId(
123
+ NftId componentNftId
124
+ ) external view returns (NftId productNftId) {
125
+ return _productNft[componentNftId];
101
126
  }
102
127
 
103
128
  function getTokenHandler(
@@ -106,16 +131,10 @@ abstract contract TreasuryModule is ITreasuryModule {
106
131
  return _tokenHandler[componentNftId];
107
132
  }
108
133
 
109
- function getProductSetup(
134
+ function getTreasuryInfo(
110
135
  NftId productNftId
111
- ) external view override returns (ProductSetup memory setup) {
112
- return _productSetup[productNftId];
113
- }
114
-
115
- function getPoolSetup(
116
- NftId poolNftId
117
- ) external view override returns (PoolSetup memory setup) {
118
- return _poolSetup[poolNftId];
136
+ ) public view override returns (TreasuryInfo memory info) {
137
+ return abi.decode(_getData(TREASURY(), productNftId), (TreasuryInfo));
119
138
  }
120
139
 
121
140
  function calculateFeeAmount(
@@ -132,8 +151,8 @@ abstract contract TreasuryModule is ITreasuryModule {
132
151
  return FeeLib.toFee(fractionalFee, fixedFee);
133
152
  }
134
153
 
135
- function getZeroFee() external pure override returns (Fee memory fee) {
136
- return FeeLib.zeroFee();
154
+ function getZeroFee() external view override returns (Fee memory fee) {
155
+ return _zeroFee;
137
156
  }
138
157
 
139
158
  function getUFixed(
@@ -11,13 +11,14 @@ import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
11
11
  import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
12
12
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
13
13
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
14
-
14
+ import {IKeyValueStore} from "../../instance/base/IKeyValueStore.sol";
15
15
  import {IVersionable} from "../../shared/IVersionable.sol";
16
16
  import {Versionable} from "../../shared/Versionable.sol";
17
17
 
18
18
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
- import {ObjectType, PRODUCT, ORACLE, POOL} from "../../types/ObjectType.sol";
19
+ import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL} from "../../types/ObjectType.sol";
20
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
+ import {Key32} from "../../types/Key32.sol";
21
22
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
22
23
  import {Fee} from "../../types/Fee.sol";
23
24
  import {Version, VersionLib} from "../../types/Version.sol";
@@ -97,29 +98,28 @@ contract ComponentOwnerService is
97
98
 
98
99
  instance.registerComponent(
99
100
  nftId,
100
- objectType,
101
- token);
102
-
103
- address wallet = component.getWallet();
101
+ token,
102
+ component.getWallet());
104
103
 
105
104
  // component type specific registration actions
106
105
  if (component.getType() == PRODUCT()) {
107
106
  IProductComponent product = IProductComponent(address(component));
108
107
  NftId poolNftId = product.getPoolNftId();
109
108
  require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
110
- // validate pool token and product token are same
109
+ IPoolComponent pool = IPoolComponent(_registry.getObjectInfo(poolNftId).objectAddress);
111
110
 
112
111
  // register with tresury
113
112
  // implement and add validation
114
113
  NftId distributorNftId = zeroNftId();
115
- instance.registerProduct(
114
+ instance.registerProductSetup(
116
115
  nftId,
117
116
  distributorNftId,
118
117
  poolNftId,
119
118
  token,
120
- wallet,
121
119
  product.getPolicyFee(),
122
- product.getProcessingFee()
120
+ product.getProcessingFee(),
121
+ pool.getStakingFee(),
122
+ pool.getPerformanceFee()
123
123
  );
124
124
  } else if (component.getType() == POOL()) {
125
125
  IPoolComponent pool = IPoolComponent(address(component));
@@ -129,42 +129,27 @@ contract ComponentOwnerService is
129
129
  nftId,
130
130
  pool.isVerifying(),
131
131
  pool.getCollateralizationLevel());
132
-
133
- // register with tresury
134
- instance.registerPool(
135
- nftId,
136
- wallet,
137
- pool.getStakingFee(),
138
- pool.getPerformanceFee());
139
132
  }
140
- // TODO add distribution
133
+ // TODO add compensation
141
134
  }
142
135
 
143
136
  function lock(
144
137
  IBaseComponent component
145
138
  ) external override onlyRegisteredComponent(component) {
139
+ // TODO use msg.sender to get component and get instance via registered parent nft id
146
140
  IInstance instance = component.getInstance();
147
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
148
- component.getNftId()
149
- );
150
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
151
-
152
- info.state = PAUSED();
153
- // setComponentInfo checks for valid state changes
154
- instance.setComponentInfo(info);
141
+ NftId nftId = component.getNftId();
142
+ Key32 key = nftId.toKey32(COMPONENT());
143
+ instance.updateState(key, PAUSED());
155
144
  }
156
145
 
157
146
  function unlock(
158
147
  IBaseComponent component
159
148
  ) external override onlyRegisteredComponent(component) {
149
+ // TODO use msg.sender to get component and get instance via registered parent nft id
160
150
  IInstance instance = component.getInstance();
161
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
162
- component.getNftId()
163
- );
164
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
165
-
166
- info.state = ACTIVE();
167
- // setComponentInfo checks for valid state changes
168
- instance.setComponentInfo(info);
151
+ NftId nftId = component.getNftId();
152
+ Key32 key = nftId.toKey32(COMPONENT());
153
+ instance.updateState(key, ACTIVE());
169
154
  }
170
155
  }
@@ -1,11 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IRisk} from "../module/risk/IRisk.sol";
5
+ import {IService} from "../base/IService.sol";
6
+
4
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {RiskId} from "../../types/RiskId.sol";
9
+ import {StateId} from "../../types/StateId.sol";
5
10
  import {Timestamp} from "../../types/Timestamp.sol";
6
11
  import {UFixed} from "../../types/UFixed.sol";
7
12
  import {Fee} from "../../types/Fee.sol";
8
- import {IService} from "../base/IService.sol";
9
13
 
10
14
  interface IProductService is IService {
11
15
  function setFees(
@@ -13,8 +17,24 @@ interface IProductService is IService {
13
17
  Fee memory processingFee
14
18
  ) external;
15
19
 
20
+ function createRisk(
21
+ RiskId riskId,
22
+ bytes memory data
23
+ ) external;
24
+
25
+ function setRiskInfo(
26
+ RiskId riskId,
27
+ IRisk.RiskInfo memory data
28
+ ) external;
29
+
30
+ function updateRiskState(
31
+ RiskId riskId,
32
+ StateId state
33
+ ) external;
34
+
16
35
  function createApplication(
17
36
  address applicationOwner,
37
+ RiskId riskId,
18
38
  uint256 sumInsuredAmount,
19
39
  uint256 premiumAmount,
20
40
  uint256 lifetime,
@@ -50,8 +50,13 @@ contract PoolService is ComponentServiceBase, IPoolService {
50
50
  external
51
51
  override
52
52
  {
53
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
53
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
+
55
+ NftId productNftId = instance.getProductNftId(poolInfo.nftId);
56
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
57
+ treasuryInfo.stakingFee = stakingFee;
58
+ treasuryInfo.performanceFee = performanceFee;
59
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
55
60
  }
56
61
 
57
62
  function createBundle(
@@ -109,9 +114,10 @@ contract PoolService is ComponentServiceBase, IPoolService {
109
114
  {
110
115
  // process token transfer(s)
111
116
  if(stakingAmount > 0) {
112
- TokenHandler tokenHandler = instance.getTokenHandler(poolNftId);
117
+ NftId productNftId = instance.getProductNftId(poolNftId);
118
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
113
119
  address bundleOwner = _registry.getOwner(bundleNftId);
114
- address poolWallet = instance.getPoolSetup(poolNftId).wallet;
120
+ address poolWallet = instance.getComponentWallet(poolNftId);
115
121
 
116
122
  tokenHandler.transfer(
117
123
  bundleOwner,