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

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -6,6 +6,7 @@ import {IPoolComponent} from "../../components/IPoolComponent.sol";
6
6
  import {IInstance} from "../../instance/IInstance.sol";
7
7
  import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
8
8
  import {IPool} from "../module/pool/IPoolModule.sol";
9
+ import {IRisk} from "../module/risk/IRisk.sol";
9
10
  import {IBundle} from "../module/bundle/IBundle.sol";
10
11
  import {IProductService} from "./IProductService.sol";
11
12
  import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
@@ -15,11 +16,13 @@ import {Versionable} from "../../shared/Versionable.sol";
15
16
 
16
17
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
17
18
  import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
19
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
18
20
  import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
19
21
  import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
20
22
  import {NftId, NftIdLib} from "../../types/NftId.sol";
21
- import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
22
23
  import {Fee, FeeLib} from "../../types/Fee.sol";
24
+ import {RiskId} from "../../types/RiskId.sol";
25
+ import {StateId} from "../../types/StateId.sol";
23
26
  import {Version, VersionLib} from "../../types/Version.sol";
24
27
 
25
28
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
@@ -62,11 +65,51 @@ contract ProductService is ComponentServiceBase, IProductService {
62
65
  override
63
66
  {
64
67
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
65
- instance.setProductFees(productInfo.nftId, policyFee, processingFee);
68
+ NftId productNftId = productInfo.nftId;
69
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
70
+ treasuryInfo.policyFee = policyFee;
71
+ treasuryInfo.processingFee = processingFee;
72
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
73
+ }
74
+
75
+ function createRisk(
76
+ RiskId riskId,
77
+ bytes memory data
78
+ ) external override {
79
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
80
+ NftId productNftId = productInfo.nftId;
81
+ instance.createRisk(
82
+ riskId,
83
+ productNftId,
84
+ data
85
+ );
86
+ }
87
+
88
+ function setRiskInfo(
89
+ RiskId riskId,
90
+ IRisk.RiskInfo memory info
91
+ ) external {
92
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
93
+ instance.setRiskInfo(
94
+ riskId,
95
+ info
96
+ );
97
+ }
98
+
99
+ function updateRiskState(
100
+ RiskId riskId,
101
+ StateId state
102
+ ) external {
103
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
104
+ instance.updateRiskState(
105
+ riskId,
106
+ state
107
+ );
66
108
  }
67
109
 
68
110
  function createApplication(
69
111
  address applicationOwner,
112
+ RiskId riskId,
70
113
  uint256 sumInsuredAmount,
71
114
  uint256 premiumAmount,
72
115
  uint256 lifetime,
@@ -83,9 +126,10 @@ contract ProductService is ComponentServiceBase, IProductService {
83
126
  ""
84
127
  );
85
128
 
86
- instance.createApplication(
87
- productNftId,
129
+ instance.createPolicyInfo(
88
130
  policyNftId,
131
+ productNftId,
132
+ riskId,
89
133
  sumInsuredAmount,
90
134
  premiumAmount,
91
135
  lifetime,
@@ -102,30 +146,29 @@ contract ProductService is ComponentServiceBase, IProductService {
102
146
  internal
103
147
  view
104
148
  returns (
105
- ITreasury.ProductSetup memory productSetup,
149
+ ITreasury.TreasuryInfo memory treasuryInfo,
150
+ NftId bundleNftId,
106
151
  IBundle.BundleInfo memory bundleInfo,
107
- uint256 collateralAmount,
108
- bool poolIsVerifying,
109
- bytes memory bundleFilter
152
+ uint256 collateralAmount
110
153
  )
111
154
  {
112
155
  // 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");
156
+ treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
157
+ bundleNftId = policyInfo.bundleNftId;
158
+ bundleInfo = instance.getBundleInfo(bundleNftId);
159
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
116
160
 
117
161
  // calculate required collateral
118
- NftId poolNftId = productSetup.poolNftId;
162
+ NftId poolNftId = treasuryInfo.poolNftId;
119
163
  IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
120
164
 
121
165
  // obtain remaining return values
122
- poolIsVerifying = poolInfo.isVerifying;
123
166
  collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
124
- bundleFilter = bundleInfo.filter;
125
167
  }
126
168
 
127
169
  function _lockCollateralInBundle(
128
170
  IInstance instance,
171
+ NftId bundleNftId,
129
172
  IBundle.BundleInfo memory bundleInfo,
130
173
  NftId policyNftId,
131
174
  uint256 collateralAmount
@@ -134,23 +177,24 @@ contract ProductService is ComponentServiceBase, IProductService {
134
177
  returns (IBundle.BundleInfo memory)
135
178
  {
136
179
  bundleInfo.lockedAmount += collateralAmount;
137
- instance.collateralizePolicy(bundleInfo.nftId, policyNftId, collateralAmount);
180
+ instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
138
181
  return bundleInfo;
139
182
  }
140
183
 
141
184
  function _underwriteByPool(
142
- ITreasury.ProductSetup memory productSetup,
185
+ ITreasury.TreasuryInfo memory treasuryInfo,
186
+ NftId policyNftId,
143
187
  IPolicy.PolicyInfo memory policyInfo,
144
188
  bytes memory bundleFilter,
145
189
  uint256 collateralAmount
146
190
  )
147
191
  internal
148
192
  {
149
- address poolAddress = _registry.getObjectInfo(productSetup.poolNftId).objectAddress;
193
+ address poolAddress = _registry.getObjectInfo(treasuryInfo.poolNftId).objectAddress;
150
194
  IPoolComponent pool = IPoolComponent(poolAddress);
151
195
  pool.underwrite(
152
- policyInfo.nftId,
153
- policyInfo.data,
196
+ policyNftId,
197
+ policyInfo.applicationData,
154
198
  bundleFilter,
155
199
  collateralAmount);
156
200
  }
@@ -174,14 +218,18 @@ contract ProductService is ComponentServiceBase, IProductService {
174
218
  NftId productNftId = productInfo.nftId;
175
219
  IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
176
220
  require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
177
- require(policyInfo.state == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
221
+ require(instance.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
222
+
223
+ ITreasury.TreasuryInfo memory treasuryInfo;
224
+ NftId bundleNftId;
225
+ IBundle.BundleInfo memory bundleInfo;
226
+ uint256 collateralAmount;
178
227
 
179
228
  (
180
- ITreasury.ProductSetup memory productSetup,
181
- IBundle.BundleInfo memory bundleInfo,
182
- uint256 collateralAmount,
183
- bool poolIsVerifying,
184
- bytes memory bundleFilter
229
+ treasuryInfo,
230
+ bundleNftId,
231
+ bundleInfo,
232
+ collateralAmount
185
233
  ) = _getAndVerifyUnderwritingSetup(
186
234
  instance,
187
235
  policyInfo
@@ -190,15 +238,28 @@ contract ProductService is ComponentServiceBase, IProductService {
190
238
  // lock bundle collateral
191
239
  bundleInfo = _lockCollateralInBundle(
192
240
  instance,
241
+ bundleNftId,
193
242
  bundleInfo,
194
243
  policyNftId,
195
244
  collateralAmount);
196
245
 
197
- // collect premium
246
+ // set policy state to underwritten
247
+ instance.updatePolicyState(policyNftId, UNDERWRITTEN());
248
+
249
+ // optional activation of policy
250
+ if(activateAt > zeroTimestamp()) {
251
+ policyInfo.activatedAt = activateAt;
252
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
253
+
254
+ instance.updatePolicyState(policyNftId, ACTIVE());
255
+ }
256
+
257
+ // optional collection of premium
198
258
  if(requirePremiumPayment) {
199
259
  uint256 netPremiumAmount = _processPremiumByTreasury(
200
260
  instance,
201
- productSetup,
261
+ productInfo.nftId,
262
+ treasuryInfo,
202
263
  policyNftId,
203
264
  policyInfo.premiumAmount);
204
265
 
@@ -206,31 +267,23 @@ contract ProductService is ComponentServiceBase, IProductService {
206
267
  bundleInfo.balanceAmount += netPremiumAmount;
207
268
  }
208
269
 
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
- );
270
+ instance.setPolicyInfo(policyNftId, policyInfo);
271
+ instance.setBundleInfo(bundleNftId, bundleInfo);
272
+
273
+ // involve pool if necessary
274
+ {
275
+ NftId poolNftId = treasuryInfo.poolNftId;
276
+ IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
277
+
278
+ if(poolInfo.isVerifying) {
279
+ _underwriteByPool(
280
+ treasuryInfo,
281
+ policyNftId,
282
+ policyInfo,
283
+ bundleInfo.filter,
284
+ collateralAmount
285
+ );
286
+ }
234
287
  }
235
288
 
236
289
  // TODO add logging
@@ -248,14 +301,13 @@ contract ProductService is ComponentServiceBase, IProductService {
248
301
 
249
302
  // perform actual token transfers
250
303
  IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
251
- ITreasury.ProductSetup memory product = instance.getProductSetup(productInfo.nftId);
304
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
252
305
 
253
306
  uint256 premiumAmount = policyInfo.premiumAmount;
254
- _processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
307
+ _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
255
308
 
256
309
  // policy level book keeping for premium paid
257
310
  policyInfo.premiumPaidAmount += premiumAmount;
258
- policyInfo.updatedIn = blockNumber();
259
311
 
260
312
  // optional activation of policy
261
313
  if(activateAt > zeroTimestamp()) {
@@ -266,11 +318,10 @@ contract ProductService is ComponentServiceBase, IProductService {
266
318
  policyInfo.activatedAt = activateAt;
267
319
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
268
320
 
269
- // TODO add require for state change
270
- policyInfo.state = ACTIVE();
321
+ instance.updatePolicyState(policyNftId, ACTIVE());
271
322
  }
272
323
 
273
- instance.setPolicyInfo(policyInfo);
324
+ instance.setPolicyInfo(policyNftId, policyInfo);
274
325
 
275
326
  // TODO add logging
276
327
  }
@@ -288,10 +339,8 @@ contract ProductService is ComponentServiceBase, IProductService {
288
339
  policyInfo.activatedAt = activateAt;
289
340
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
290
341
 
291
- // TODO add require for state change
292
- policyInfo.state = ACTIVE();
293
-
294
- instance.setPolicyInfo(policyInfo);
342
+ instance.setPolicyInfo(policyNftId, policyInfo);
343
+ instance.updatePolicyState(policyNftId, ACTIVE());
295
344
 
296
345
  // TODO add logging
297
346
  }
@@ -311,12 +360,14 @@ contract ProductService is ComponentServiceBase, IProductService {
311
360
  view
312
361
  returns (NftId poolNftid)
313
362
  {
314
- return instance.getProductSetup(productNftId).poolNftId;
363
+ return instance.getTreasuryInfo(productNftId).poolNftId;
315
364
  }
316
365
 
366
+
317
367
  function _processPremiumByTreasury(
318
368
  IInstance instance,
319
- ITreasury.ProductSetup memory product,
369
+ NftId productNftId,
370
+ ITreasury.TreasuryInfo memory treasuryInfo,
320
371
  NftId policyNftId,
321
372
  uint256 premiumAmount
322
373
  )
@@ -325,11 +376,11 @@ contract ProductService is ComponentServiceBase, IProductService {
325
376
  {
326
377
  // process token transfer(s)
327
378
  if(premiumAmount > 0) {
328
- TokenHandler tokenHandler = instance.getTokenHandler(product.productNftId);
379
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
329
380
  address policyOwner = _registry.getOwner(policyNftId);
330
- address poolWallet = instance.getPoolSetup(product.poolNftId).wallet;
381
+ address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
331
382
  netPremiumAmount = premiumAmount;
332
- Fee memory policyFee = product.policyFee;
383
+ Fee memory policyFee = treasuryInfo.policyFee;
333
384
 
334
385
  if (FeeLib.feeIsZero(policyFee)) {
335
386
  tokenHandler.transfer(
@@ -343,7 +394,8 @@ contract ProductService is ComponentServiceBase, IProductService {
343
394
  policyFee
344
395
  );
345
396
 
346
- tokenHandler.transfer(policyOwner, product.wallet, feeAmount);
397
+ address productWallet = instance.getComponentWallet(productNftId);
398
+ tokenHandler.transfer(policyOwner, productWallet, feeAmount);
347
399
  tokenHandler.transfer(policyOwner, poolWallet, netAmount);
348
400
  netPremiumAmount = netAmount;
349
401
  }
@@ -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, COMPENSATION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
13
 
14
14
  // TODO make registry upgradable
15
15
  contract Registry is
@@ -293,7 +293,7 @@ contract Registry is
293
293
 
294
294
  // instance as parent
295
295
  _isValidParentType[PRODUCT()][INSTANCE()] = true;
296
- _isValidParentType[DISTRIBUTOR()][INSTANCE()] = true;
296
+ _isValidParentType[COMPENSATION()][INSTANCE()] = true;
297
297
  _isValidParentType[ORACLE()][INSTANCE()] = true;
298
298
  _isValidParentType[POOL()][INSTANCE()] = true;
299
299
 
@@ -14,9 +14,11 @@ 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 stakingFee,
19
+ Fee memory performanceFee
18
20
  )
19
- Pool(registry, instanceNftid, token, isVerifying, collateralizationLevel)
21
+ Pool(registry, instanceNftid, token, isVerifying, collateralizationLevel, stakingFee, performanceFee)
20
22
  // solhint-disable-next-line no-empty-blocks
21
23
  {}
22
24
  }
@@ -3,6 +3,7 @@ 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 {RiskId} from "../../contracts/types/RiskId.sol";
6
7
  import {Timestamp, blockTimestamp} from "../../contracts/types/Timestamp.sol";
7
8
  import {Fee} from "../../contracts/types/Fee.sol";
8
9
 
@@ -10,10 +11,25 @@ contract TestProduct is Product {
10
11
 
11
12
  event LogTestProductSender(address sender);
12
13
 
13
- constructor(address registry, NftId instanceNftid, address token, address pool)
14
- Product(registry, instanceNftid, token, pool)
14
+ string public constant DEFAULT_RISK_NAME = "DEFAULT_RISK";
15
+ bool private defaultRiskCreated;
16
+
17
+ constructor(
18
+ address registry,
19
+ NftId instanceNftid,
20
+ address token,
21
+ address pool,
22
+ Fee memory policyFee,
23
+ Fee memory processingFee
24
+ )
25
+ Product(registry, instanceNftid, token, pool, policyFee, processingFee)
15
26
  // solhint-disable-next-line no-empty-blocks
16
- {}
27
+ {
28
+ }
29
+
30
+ function getDefaultRiskId() public pure returns (RiskId) {
31
+ return _toRiskId(DEFAULT_RISK_NAME);
32
+ }
17
33
 
18
34
  function applyForPolicy(
19
35
  uint256 sumInsuredAmount,
@@ -24,8 +40,14 @@ contract TestProduct is Product {
24
40
  external
25
41
  returns(NftId nftId)
26
42
  {
43
+ if (!defaultRiskCreated) {
44
+ _createRisk(getDefaultRiskId() , "");
45
+ defaultRiskCreated = true;
46
+ }
47
+
27
48
  nftId = _createApplication(
28
49
  msg.sender, // policy holder
50
+ getDefaultRiskId(),
29
51
  sumInsuredAmount,
30
52
  premiumAmount,
31
53
  lifetime,
@@ -37,36 +37,48 @@ function STAKE() pure returns (ObjectType) {
37
37
  return toObjectType(60);
38
38
  }
39
39
 
40
- function PRODUCT() pure returns (ObjectType) {
40
+ function COMPONENT() pure returns (ObjectType) {
41
41
  return toObjectType(100);
42
42
  }
43
43
 
44
- function DISTRIBUTOR() pure returns (ObjectType) {
44
+ function TREASURY() pure returns (ObjectType) {
45
+ return toObjectType(101);
46
+ }
47
+
48
+ function PRODUCT() pure returns (ObjectType) {
45
49
  return toObjectType(110);
46
50
  }
47
51
 
48
- function ORACLE() pure returns (ObjectType) {
52
+ function COMPENSATION() pure returns (ObjectType) {
49
53
  return toObjectType(120);
50
54
  }
51
55
 
52
- function POOL() pure returns (ObjectType) {
56
+ function ORACLE() pure returns (ObjectType) {
53
57
  return toObjectType(130);
54
58
  }
55
59
 
56
- function POLICY() pure returns (ObjectType) {
60
+ function POOL() pure returns (ObjectType) {
61
+ return toObjectType(140);
62
+ }
63
+
64
+ function RISK() pure returns (ObjectType) {
57
65
  return toObjectType(200);
58
66
  }
59
67
 
60
- function BUNDLE() pure returns (ObjectType) {
68
+ function POLICY() pure returns (ObjectType) {
61
69
  return toObjectType(210);
62
70
  }
63
71
 
72
+ function BUNDLE() pure returns (ObjectType) {
73
+ return toObjectType(220);
74
+ }
75
+
64
76
  function CLAIM() pure returns (ObjectType) {
65
- return toObjectType(201);
77
+ return toObjectType(211);
66
78
  }
67
79
 
68
80
  function PAYOUT() pure returns (ObjectType) {
69
- return toObjectType(202);
81
+ return toObjectType(212);
70
82
  }
71
83
 
72
84
  /// @dev Converts the uint8 to a ObjectType.
@@ -0,0 +1,43 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Key32, KeyId, Key32Lib} from "./Key32.sol";
5
+ import {RISK} from "./ObjectType.sol";
6
+
7
+ type RiskId is bytes8;
8
+
9
+ // type bindings
10
+ using {
11
+ eqRiskId as ==,
12
+ neRiskId as !=,
13
+ RiskIdLib.toKey32
14
+ } for RiskId global;
15
+
16
+ // general pure free functions
17
+
18
+ // @dev Returns true iff risk ids a and b are identical
19
+ function eqRiskId(RiskId a, RiskId b) pure returns (bool isSame) {
20
+ return RiskId.unwrap(a) == RiskId.unwrap(b);
21
+ }
22
+
23
+ // @dev Returns true iff risk ids a and b are different
24
+ function neRiskId(RiskId a, RiskId b) pure returns (bool isDifferent) {
25
+ return RiskId.unwrap(a) != RiskId.unwrap(b);
26
+ }
27
+
28
+ library RiskIdLib {
29
+ // @dev Converts a role string into a role id.
30
+ function toRiskId(string memory risk) public pure returns (RiskId) {
31
+ return RiskId.wrap(bytes8(keccak256(abi.encode(risk))));
32
+ }
33
+
34
+ /// @dev Returns the key32 value for the specified nft id and object type.
35
+ function toKey32(RiskId id) public pure returns (Key32 key) {
36
+ return Key32Lib.toKey32(RISK(), toKeyId(id));
37
+ }
38
+
39
+ /// @dev Returns the key id value for the specified nft id
40
+ function toKeyId(RiskId id) public pure returns (KeyId keyId) {
41
+ return KeyId.wrap(bytes31(RiskId.unwrap(id)));
42
+ }
43
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etherisc/gif-next",
3
- "version": "0.0.2-fc8b370-882",
3
+ "version": "0.0.2-fe34d97-357",
4
4
  "description": "This is the repository for the next version of the Generic Insurance Framework (GIF) smart contracts. ",
5
5
  "main": "index.js",
6
6
  "scripts": {