@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
@@ -2,10 +2,13 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
5
6
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
7
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
6
8
  import {IInstance} from "../../instance/IInstance.sol";
7
9
  import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
8
10
  import {IPool} from "../module/pool/IPoolModule.sol";
11
+ import {IRisk} from "../module/risk/IRisk.sol";
9
12
  import {IBundle} from "../module/bundle/IBundle.sol";
10
13
  import {IProductService} from "./IProductService.sol";
11
14
  import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
@@ -15,11 +18,14 @@ import {Versionable} from "../../shared/Versionable.sol";
15
18
 
16
19
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
17
20
  import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
21
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
18
22
  import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
19
23
  import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
20
24
  import {NftId, NftIdLib} from "../../types/NftId.sol";
21
- import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
22
25
  import {Fee, FeeLib} from "../../types/Fee.sol";
26
+ import {ReferralId} from "../../types/ReferralId.sol";
27
+ import {RiskId} from "../../types/RiskId.sol";
28
+ import {StateId} from "../../types/StateId.sol";
23
29
  import {Version, VersionLib} from "../../types/Version.sol";
24
30
 
25
31
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
@@ -55,37 +61,168 @@ contract ProductService is ComponentServiceBase, IProductService {
55
61
  }
56
62
 
57
63
  function setFees(
58
- Fee memory policyFee,
64
+ Fee memory productFee,
59
65
  Fee memory processingFee
60
66
  )
61
67
  external
62
68
  override
63
69
  {
64
70
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
65
- instance.setProductFees(productInfo.nftId, policyFee, processingFee);
71
+ NftId productNftId = productInfo.nftId;
72
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
73
+ treasuryInfo.productFee = productFee;
74
+ treasuryInfo.processingFee = processingFee;
75
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
76
+ }
77
+
78
+ function createRisk(
79
+ RiskId riskId,
80
+ bytes memory data
81
+ ) external override {
82
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
83
+ NftId productNftId = productInfo.nftId;
84
+ instance.createRisk(
85
+ riskId,
86
+ productNftId,
87
+ data
88
+ );
89
+ }
90
+
91
+ function setRiskInfo(
92
+ RiskId riskId,
93
+ IRisk.RiskInfo memory info
94
+ ) external {
95
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
96
+ instance.setRiskInfo(
97
+ riskId,
98
+ info
99
+ );
100
+ }
101
+
102
+ function updateRiskState(
103
+ RiskId riskId,
104
+ StateId state
105
+ ) external {
106
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
107
+ instance.updateRiskState(
108
+ riskId,
109
+ state
110
+ );
111
+ }
112
+
113
+ function _getAndVerifyInstanceAndProduct() internal view returns (IProductComponent product) {
114
+ IRegistry.ObjectInfo memory productInfo;
115
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
116
+ product = IProductComponent(productInfo.objectAddress);
117
+ }
118
+
119
+ function calculatePremium(
120
+ RiskId riskId,
121
+ uint256 sumInsuredAmount,
122
+ uint256 lifetime,
123
+ bytes memory applicationData,
124
+ NftId bundleNftId,
125
+ ReferralId referralId
126
+ )
127
+ public
128
+ view
129
+ override
130
+ returns (
131
+ uint256 premiumAmount,
132
+ uint256 productFeeAmount,
133
+ uint256 poolFeeAmount,
134
+ uint256 bundleFeeAmount,
135
+ uint256 distributionFeeAmount
136
+ )
137
+ {
138
+ IProductComponent product = _getAndVerifyInstanceAndProduct();
139
+ uint256 netPremiumAmount = product.calculateNetPremium(
140
+ sumInsuredAmount,
141
+ riskId,
142
+ lifetime,
143
+ applicationData
144
+ );
145
+
146
+ (
147
+ productFeeAmount,
148
+ poolFeeAmount,
149
+ bundleFeeAmount,
150
+ distributionFeeAmount
151
+ ) = _calculateFeeAmounts(
152
+ netPremiumAmount,
153
+ product,
154
+ bundleNftId,
155
+ referralId
156
+ );
157
+
158
+ premiumAmount = netPremiumAmount + productFeeAmount;
159
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
160
+ premiumAmount += distributionFeeAmount;
161
+ }
162
+
163
+ function _calculateFeeAmounts(
164
+ uint256 netPremiumAmount,
165
+ IProductComponent product,
166
+ NftId bundleNftId,
167
+ ReferralId referralId
168
+ )
169
+ internal
170
+ view
171
+ returns (
172
+ uint256 productFeeAmount,
173
+ uint256 poolFeeAmount,
174
+ uint256 bundleFeeAmount,
175
+ uint256 distributionFeeAmount
176
+ )
177
+ {
178
+ IInstance instance = product.getInstance();
179
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(product.getNftId());
180
+ IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
181
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
182
+
183
+ (productFeeAmount,) = FeeLib.calculateFee(treasuryInfo.productFee, netPremiumAmount);
184
+ (poolFeeAmount,) = FeeLib.calculateFee(treasuryInfo.poolFee, netPremiumAmount);
185
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
186
+
187
+ IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(treasuryInfo.distributionNftId);
188
+ IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
189
+ distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
66
190
  }
67
191
 
192
+
68
193
  function createApplication(
69
194
  address applicationOwner,
195
+ RiskId riskId,
70
196
  uint256 sumInsuredAmount,
71
- uint256 premiumAmount,
72
197
  uint256 lifetime,
73
- NftId bundleNftId
198
+ bytes memory applicationData,
199
+ NftId bundleNftId,
200
+ ReferralId referralId
74
201
  ) external override returns (NftId policyNftId) {
75
202
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
76
- NftId productNftId = productInfo.nftId;
77
203
  // TODO add validations (see create bundle in pool service)
78
204
 
79
205
  policyNftId = this.getRegistry().registerObjectForInstance(
80
- productNftId,
206
+ productInfo.nftId,
81
207
  POLICY(),
82
208
  applicationOwner,
83
209
  ""
84
210
  );
85
211
 
86
- instance.createApplication(
87
- productNftId,
212
+ (uint256 premiumAmount,,,,) = calculatePremium(
213
+ riskId,
214
+ sumInsuredAmount,
215
+ lifetime,
216
+ applicationData,
217
+ bundleNftId,
218
+ referralId
219
+ );
220
+
221
+ instance.createPolicyInfo(
88
222
  policyNftId,
223
+ productInfo.nftId,
224
+ referralId,
225
+ riskId,
89
226
  sumInsuredAmount,
90
227
  premiumAmount,
91
228
  lifetime,
@@ -102,30 +239,29 @@ contract ProductService is ComponentServiceBase, IProductService {
102
239
  internal
103
240
  view
104
241
  returns (
105
- ITreasury.ProductSetup memory productSetup,
242
+ ITreasury.TreasuryInfo memory treasuryInfo,
243
+ NftId bundleNftId,
106
244
  IBundle.BundleInfo memory bundleInfo,
107
- uint256 collateralAmount,
108
- bool poolIsVerifying,
109
- bytes memory bundleFilter
245
+ uint256 collateralAmount
110
246
  )
111
247
  {
112
248
  // check match between policy and bundle (via pool)
113
- productSetup = instance.getProductSetup(policyInfo.productNftId);
114
- bundleInfo = instance.getBundleInfo(policyInfo.bundleNftId);
115
- require(bundleInfo.poolNftId == productSetup.poolNftId, "POLICY_BUNDLE_MISMATCH");
249
+ treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
250
+ bundleNftId = policyInfo.bundleNftId;
251
+ bundleInfo = instance.getBundleInfo(bundleNftId);
252
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
116
253
 
117
254
  // calculate required collateral
118
- NftId poolNftId = productSetup.poolNftId;
255
+ NftId poolNftId = treasuryInfo.poolNftId;
119
256
  IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
120
257
 
121
258
  // obtain remaining return values
122
- poolIsVerifying = poolInfo.isVerifying;
123
259
  collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
124
- bundleFilter = bundleInfo.filter;
125
260
  }
126
261
 
127
262
  function _lockCollateralInBundle(
128
263
  IInstance instance,
264
+ NftId bundleNftId,
129
265
  IBundle.BundleInfo memory bundleInfo,
130
266
  NftId policyNftId,
131
267
  uint256 collateralAmount
@@ -134,28 +270,39 @@ contract ProductService is ComponentServiceBase, IProductService {
134
270
  returns (IBundle.BundleInfo memory)
135
271
  {
136
272
  bundleInfo.lockedAmount += collateralAmount;
137
- instance.collateralizePolicy(bundleInfo.nftId, policyNftId, collateralAmount);
273
+ instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
138
274
  return bundleInfo;
139
275
  }
140
276
 
141
277
  function _underwriteByPool(
142
- ITreasury.ProductSetup memory productSetup,
278
+ ITreasury.TreasuryInfo memory treasuryInfo,
279
+ NftId policyNftId,
143
280
  IPolicy.PolicyInfo memory policyInfo,
144
281
  bytes memory bundleFilter,
145
282
  uint256 collateralAmount
146
283
  )
147
284
  internal
148
285
  {
149
- address poolAddress = _registry.getObjectInfo(productSetup.poolNftId).objectAddress;
286
+ address poolAddress = _registry.getObjectInfo(treasuryInfo.poolNftId).objectAddress;
150
287
  IPoolComponent pool = IPoolComponent(poolAddress);
151
288
  pool.underwrite(
152
- policyInfo.nftId,
153
- policyInfo.data,
289
+ policyNftId,
290
+ policyInfo.applicationData,
154
291
  bundleFilter,
155
292
  collateralAmount);
156
293
  }
157
294
 
158
295
 
296
+ function revoke(
297
+ NftId policyNftId
298
+ )
299
+ external
300
+ override
301
+ {
302
+ require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
303
+ }
304
+
305
+
159
306
  function underwrite(
160
307
  NftId policyNftId,
161
308
  bool requirePremiumPayment,
@@ -174,14 +321,18 @@ contract ProductService is ComponentServiceBase, IProductService {
174
321
  NftId productNftId = productInfo.nftId;
175
322
  IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
176
323
  require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
177
- require(policyInfo.state == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
324
+ require(instance.getState(policyNftId.toKey32(POLICY())) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
325
+
326
+ ITreasury.TreasuryInfo memory treasuryInfo;
327
+ NftId bundleNftId;
328
+ IBundle.BundleInfo memory bundleInfo;
329
+ uint256 collateralAmount;
178
330
 
179
331
  (
180
- ITreasury.ProductSetup memory productSetup,
181
- IBundle.BundleInfo memory bundleInfo,
182
- uint256 collateralAmount,
183
- bool poolIsVerifying,
184
- bytes memory bundleFilter
332
+ treasuryInfo,
333
+ bundleNftId,
334
+ bundleInfo,
335
+ collateralAmount
185
336
  ) = _getAndVerifyUnderwritingSetup(
186
337
  instance,
187
338
  policyInfo
@@ -190,15 +341,28 @@ contract ProductService is ComponentServiceBase, IProductService {
190
341
  // lock bundle collateral
191
342
  bundleInfo = _lockCollateralInBundle(
192
343
  instance,
344
+ bundleNftId,
193
345
  bundleInfo,
194
346
  policyNftId,
195
347
  collateralAmount);
196
348
 
197
- // collect premium
349
+ // set policy state to underwritten
350
+ instance.updatePolicyState(policyNftId, UNDERWRITTEN());
351
+
352
+ // optional activation of policy
353
+ if(activateAt > zeroTimestamp()) {
354
+ policyInfo.activatedAt = activateAt;
355
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
356
+
357
+ instance.updatePolicyState(policyNftId, ACTIVE());
358
+ }
359
+
360
+ // optional collection of premium
198
361
  if(requirePremiumPayment) {
199
362
  uint256 netPremiumAmount = _processPremiumByTreasury(
200
363
  instance,
201
- productSetup,
364
+ productInfo.nftId,
365
+ treasuryInfo,
202
366
  policyNftId,
203
367
  policyInfo.premiumAmount);
204
368
 
@@ -206,31 +370,23 @@ contract ProductService is ComponentServiceBase, IProductService {
206
370
  bundleInfo.balanceAmount += netPremiumAmount;
207
371
  }
208
372
 
209
- // set policy state to underwritten
210
- // TODO add require for state change
211
- policyInfo.state = UNDERWRITTEN();
212
- policyInfo.updatedIn = blockNumber();
213
-
214
- // optional activation of policy
215
- if(activateAt > zeroTimestamp()) {
216
- policyInfo.activatedAt = activateAt;
217
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
218
-
219
- // TODO add require for state change
220
- policyInfo.state = ACTIVE();
221
- }
222
-
223
- instance.setPolicyInfo(policyInfo);
224
- instance.setBundleInfo(bundleInfo);
225
-
226
- // integrate pool component
227
- if(poolIsVerifying) {
228
- _underwriteByPool(
229
- productSetup,
230
- policyInfo,
231
- bundleFilter,
232
- collateralAmount
233
- );
373
+ instance.setPolicyInfo(policyNftId, policyInfo);
374
+ instance.setBundleInfo(bundleNftId, bundleInfo);
375
+
376
+ // involve pool if necessary
377
+ {
378
+ NftId poolNftId = treasuryInfo.poolNftId;
379
+ IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
380
+
381
+ if(poolInfo.isVerifying) {
382
+ _underwriteByPool(
383
+ treasuryInfo,
384
+ policyNftId,
385
+ policyInfo,
386
+ bundleInfo.filter,
387
+ collateralAmount
388
+ );
389
+ }
234
390
  }
235
391
 
236
392
  // TODO add logging
@@ -248,14 +404,13 @@ contract ProductService is ComponentServiceBase, IProductService {
248
404
 
249
405
  // perform actual token transfers
250
406
  IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
251
- ITreasury.ProductSetup memory product = instance.getProductSetup(productInfo.nftId);
407
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
252
408
 
253
409
  uint256 premiumAmount = policyInfo.premiumAmount;
254
- _processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
410
+ _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
255
411
 
256
412
  // policy level book keeping for premium paid
257
413
  policyInfo.premiumPaidAmount += premiumAmount;
258
- policyInfo.updatedIn = blockNumber();
259
414
 
260
415
  // optional activation of policy
261
416
  if(activateAt > zeroTimestamp()) {
@@ -266,11 +421,10 @@ contract ProductService is ComponentServiceBase, IProductService {
266
421
  policyInfo.activatedAt = activateAt;
267
422
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
268
423
 
269
- // TODO add require for state change
270
- policyInfo.state = ACTIVE();
424
+ instance.updatePolicyState(policyNftId, ACTIVE());
271
425
  }
272
426
 
273
- instance.setPolicyInfo(policyInfo);
427
+ instance.setPolicyInfo(policyNftId, policyInfo);
274
428
 
275
429
  // TODO add logging
276
430
  }
@@ -288,10 +442,8 @@ contract ProductService is ComponentServiceBase, IProductService {
288
442
  policyInfo.activatedAt = activateAt;
289
443
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
290
444
 
291
- // TODO add require for state change
292
- policyInfo.state = ACTIVE();
293
-
294
- instance.setPolicyInfo(policyInfo);
445
+ instance.setPolicyInfo(policyNftId, policyInfo);
446
+ instance.updatePolicyState(policyNftId, ACTIVE());
295
447
 
296
448
  // TODO add logging
297
449
  }
@@ -311,12 +463,14 @@ contract ProductService is ComponentServiceBase, IProductService {
311
463
  view
312
464
  returns (NftId poolNftid)
313
465
  {
314
- return instance.getProductSetup(productNftId).poolNftId;
466
+ return instance.getTreasuryInfo(productNftId).poolNftId;
315
467
  }
316
468
 
469
+
317
470
  function _processPremiumByTreasury(
318
471
  IInstance instance,
319
- ITreasury.ProductSetup memory product,
472
+ NftId productNftId,
473
+ ITreasury.TreasuryInfo memory treasuryInfo,
320
474
  NftId policyNftId,
321
475
  uint256 premiumAmount
322
476
  )
@@ -325,13 +479,13 @@ contract ProductService is ComponentServiceBase, IProductService {
325
479
  {
326
480
  // process token transfer(s)
327
481
  if(premiumAmount > 0) {
328
- TokenHandler tokenHandler = instance.getTokenHandler(product.productNftId);
482
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
329
483
  address policyOwner = _registry.getOwner(policyNftId);
330
- address poolWallet = instance.getPoolSetup(product.poolNftId).wallet;
484
+ address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
331
485
  netPremiumAmount = premiumAmount;
332
- Fee memory policyFee = product.policyFee;
486
+ Fee memory productFee = treasuryInfo.productFee;
333
487
 
334
- if (FeeLib.feeIsZero(policyFee)) {
488
+ if (FeeLib.feeIsZero(productFee)) {
335
489
  tokenHandler.transfer(
336
490
  policyOwner,
337
491
  poolWallet,
@@ -340,10 +494,11 @@ contract ProductService is ComponentServiceBase, IProductService {
340
494
  } else {
341
495
  (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
342
496
  premiumAmount,
343
- policyFee
497
+ productFee
344
498
  );
345
499
 
346
- tokenHandler.transfer(policyOwner, product.wallet, feeAmount);
500
+ address productWallet = instance.getComponentWallet(productNftId);
501
+ tokenHandler.transfer(policyOwner, productWallet, feeAmount);
347
502
  tokenHandler.transfer(policyOwner, poolWallet, netAmount);
348
503
  netPremiumAmount = netAmount;
349
504
  }
@@ -9,7 +9,7 @@ import {ChainNft} from "./ChainNft.sol";
9
9
  import {IRegistry} from "./IRegistry.sol";
10
10
  import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
11
  import {VersionPart} from "../types/Version.sol";
12
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
13
 
14
14
  // TODO make registry upgradable
15
15
  contract Registry is
@@ -280,6 +280,7 @@ contract Registry is
280
280
  _isValidType[PRODUCT()] = true;
281
281
  _isValidType[ORACLE()] = true;
282
282
  _isValidType[POOL()] = true;
283
+ _isValidType[DISTRIBUTION()] = true;
283
284
  _isValidType[POLICY()] = true;
284
285
  _isValidType[BUNDLE()] = true;
285
286
  }
@@ -293,7 +294,7 @@ contract Registry is
293
294
 
294
295
  // instance as parent
295
296
  _isValidParentType[PRODUCT()][INSTANCE()] = true;
296
- _isValidParentType[DISTRIBUTOR()][INSTANCE()] = true;
297
+ _isValidParentType[DISTRIBUTION()][INSTANCE()] = true;
297
298
  _isValidParentType[ORACLE()][INSTANCE()] = true;
298
299
  _isValidParentType[POOL()][INSTANCE()] = true;
299
300
 
@@ -0,0 +1,21 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Fee} from "../../contracts/types/Fee.sol";
5
+ import {NftId} from "../../contracts/types/NftId.sol";
6
+ import {Distribution} from "../../contracts/components/Distribution.sol";
7
+
8
+
9
+ contract TestDistribution is Distribution {
10
+
11
+ constructor(
12
+ address registry,
13
+ NftId instanceNftid,
14
+ address token,
15
+ bool isVerifying,
16
+ Fee memory distributionFee
17
+ )
18
+ Distribution(registry, instanceNftid, token, isVerifying, distributionFee)
19
+ // solhint-disable-next-line no-empty-blocks
20
+ {}
21
+ }
@@ -14,9 +14,12 @@ contract TestPool is Pool {
14
14
  NftId instanceNftid,
15
15
  address token,
16
16
  bool isVerifying,
17
- UFixed collateralizationLevel
17
+ UFixed collateralizationLevel,
18
+ Fee memory poolFee,
19
+ Fee memory stakingFee,
20
+ Fee memory performanceFee
18
21
  )
19
- Pool(registry, instanceNftid, token, isVerifying, collateralizationLevel)
22
+ Pool(registry, instanceNftid, token, isVerifying, collateralizationLevel, poolFee, stakingFee, performanceFee)
20
23
  // solhint-disable-next-line no-empty-blocks
21
24
  {}
22
25
  }
@@ -3,6 +3,8 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {Product} from "../../contracts/components/Product.sol";
5
5
  import {NftId, toNftId} from "../../contracts/types/NftId.sol";
6
+ import {ReferralId} from "../types/ReferralId.sol";
7
+ import {RiskId} from "../../contracts/types/RiskId.sol";
6
8
  import {Timestamp, blockTimestamp} from "../../contracts/types/Timestamp.sol";
7
9
  import {Fee} from "../../contracts/types/Fee.sol";
8
10
 
@@ -10,26 +12,52 @@ contract TestProduct is Product {
10
12
 
11
13
  event LogTestProductSender(address sender);
12
14
 
13
- constructor(address registry, NftId instanceNftid, address token, address pool)
14
- Product(registry, instanceNftid, token, pool)
15
+ string public constant DEFAULT_RISK_NAME = "DEFAULT_RISK";
16
+ bool private defaultRiskCreated;
17
+
18
+ constructor(
19
+ address registry,
20
+ NftId instanceNftid,
21
+ address token,
22
+ address pool,
23
+ address distribution,
24
+ Fee memory productFee,
25
+ Fee memory processingFee
26
+ )
27
+ Product(registry, instanceNftid, token, pool, distribution, productFee, processingFee)
15
28
  // solhint-disable-next-line no-empty-blocks
16
- {}
29
+ {
30
+ }
31
+
32
+ function getDefaultRiskId() public pure returns (RiskId) {
33
+ return _toRiskId(DEFAULT_RISK_NAME);
34
+ }
17
35
 
18
36
  function applyForPolicy(
19
37
  uint256 sumInsuredAmount,
20
- uint256 premiumAmount,
21
38
  uint256 lifetime,
22
- NftId bundleNftId
39
+ NftId bundleNftId,
40
+ ReferralId referralId
23
41
  )
24
42
  external
25
43
  returns(NftId nftId)
26
44
  {
45
+ RiskId riskId = getDefaultRiskId();
46
+ bytes memory applicationData = "";
47
+
48
+ if (!defaultRiskCreated) {
49
+ _createRisk(riskId, "");
50
+ defaultRiskCreated = true;
51
+ }
52
+
27
53
  nftId = _createApplication(
28
54
  msg.sender, // policy holder
55
+ riskId,
29
56
  sumInsuredAmount,
30
- premiumAmount,
31
57
  lifetime,
32
- bundleNftId
58
+ applicationData,
59
+ bundleNftId,
60
+ referralId
33
61
  );
34
62
  }
35
63
 
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {RoleId, toRoleId, PRODUCT_OWNER_ROLE_NAME, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE_NAME, POOL_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
4
+ import {RoleId, RoleIdLib, PRODUCT_OWNER_ROLE_NAME, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE_NAME, POOL_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
5
5
 
6
6
  contract TestRoleId {
7
- function getRole(string memory roleName) external pure returns (RoleId) { return toRoleId(roleName); }
7
+ function getRole(string memory roleName) external pure returns (RoleId) { return RoleIdLib.toRoleId(roleName); }
8
8
 
9
9
  function getProductOwnerRoleName() external pure returns (string memory) { return PRODUCT_OWNER_ROLE_NAME(); }
10
10
  function getProductOwnerRole() external pure returns (RoleId) { return PRODUCT_OWNER_ROLE(); }
@@ -11,8 +11,8 @@ struct Fee {
11
11
  library FeeLib {
12
12
 
13
13
  function calculateFee(
14
- uint256 amount,
15
- Fee memory fee
14
+ Fee memory fee,
15
+ uint256 amount
16
16
  )
17
17
  public
18
18
  pure
@@ -35,7 +35,12 @@ library FeeLib {
35
35
  return Fee(fractionalFee, fixedFee);
36
36
  }
37
37
 
38
- /// @dev Return the zero fee struct (0, 0)
38
+ /// @dev Return the percent fee struct (x%, 0)
39
+ function percentageFee(uint8 percent) public pure returns (Fee memory fee) {
40
+ return Fee(UFixedMathLib.toUFixed(percent, -2), 0);
41
+ }
42
+
43
+ /// @dev Return a zero fee struct (0, 0)
39
44
  function zeroFee() public pure returns (Fee memory fee) {
40
45
  return Fee(UFixed.wrap(0), 0);
41
46
  }