@etherisc/gif-next 0.0.2-f9bc4c7-556 → 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
@@ -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-f9bc4c7-556",
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": {