@etherisc/gif-next 0.0.2-b060f43-678 → 0.0.2-b12de3e-067

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 (174) hide show
  1. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  2. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.json +2 -2
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  5. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  9. package/artifacts/contracts/components/Pool.sol/Pool.json +5 -5
  10. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  11. package/artifacts/contracts/components/Product.sol/Product.json +5 -5
  12. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  13. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  14. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  32. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  33. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  34. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  35. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  36. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  37. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +26 -0
  39. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +11 -0
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +100 -74
  44. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
  46. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +2 -2
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +215 -95
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +79 -31
  54. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  56. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -19
  58. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  74. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +2 -2
  76. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +16 -48
  78. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +8 -24
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  82. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +6 -235
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +9 -233
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +20 -351
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +10 -46
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +20 -399
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +10 -78
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  106. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  109. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  111. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  113. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  114. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  115. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  116. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  117. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  118. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  120. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  123. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  124. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  125. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  126. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  127. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  129. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  130. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  131. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  132. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  133. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  135. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  136. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  137. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  138. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  139. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  140. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  141. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  142. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  143. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  144. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  145. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  146. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  147. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  149. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  155. package/contracts/components/Pool.sol +9 -5
  156. package/contracts/components/Product.sol +8 -5
  157. package/contracts/instance/IInstance.sol +4 -0
  158. package/contracts/instance/IInstanceService.sol +2 -0
  159. package/contracts/instance/Instance.sol +10 -1
  160. package/contracts/instance/InstanceService.sol +134 -69
  161. package/contracts/instance/base/ComponentServiceBase.sol +15 -77
  162. package/contracts/instance/service/BundleService.sol +260 -0
  163. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  164. package/contracts/instance/service/DistributionService.sol +38 -8
  165. package/contracts/instance/service/IBundleService.sol +45 -0
  166. package/contracts/instance/service/IPolicyService.sol +87 -0
  167. package/contracts/instance/service/IPoolService.sol +2 -33
  168. package/contracts/instance/service/IProductService.sol +2 -72
  169. package/contracts/instance/service/PolicyService.sol +508 -0
  170. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  171. package/contracts/instance/service/PoolService.sol +38 -201
  172. package/contracts/instance/service/ProductService.sol +50 -447
  173. package/contracts/types/RoleId.sol +2 -0
  174. package/package.json +1 -1
@@ -29,6 +29,7 @@ import {IPoolService} from "./IPoolService.sol";
29
29
  import {IRegistryService} from "../../registry/IRegistryService.sol";
30
30
  import {InstanceService} from "../InstanceService.sol";
31
31
  import {InstanceReader} from "../InstanceReader.sol";
32
+ import {IBaseComponent} from "../../components/IBaseComponent.sol";
32
33
 
33
34
  string constant POOL_SERVICE_NAME = "PoolService";
34
35
 
@@ -50,13 +51,13 @@ contract PoolService is
50
51
  initializer
51
52
  virtual override
52
53
  {
53
- address initialOwner = address(0);
54
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
54
+ address registryAddress;
55
+ address initialOwner;
56
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
55
57
  // TODO while PoolService is not deployed in PoolServiceManager constructor
56
58
  // owner is PoolServiceManager deployer
57
- _initializeService(_registryAddress, owner);
59
+ _initializeService(registryAddress, owner);
58
60
 
59
- _registerInterface(type(IService).interfaceId);
60
61
  _registerInterface(type(IPoolService).interfaceId);
61
62
  }
62
63
 
@@ -64,12 +65,41 @@ contract PoolService is
64
65
  return NAME;
65
66
  }
66
67
 
67
- function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
68
- ISetup.PoolSetupInfo memory initialSetup = abi.decode(
69
- initialObjData,
68
+ function register(address poolAddress)
69
+ external
70
+ returns(NftId poolNftId)
71
+ {
72
+ address poolOwner = msg.sender;
73
+ IBaseComponent pool = IBaseComponent(poolAddress);
74
+
75
+ IRegistry.ObjectInfo memory info;
76
+ bytes memory data;
77
+ (info, data) = getRegistryService().registerPool(pool, poolOwner);
78
+
79
+ IInstance instance = _getInstance(info);
80
+
81
+ bool hasRole = getInstanceService().hasRole(
82
+ poolOwner,
83
+ POOL_OWNER_ROLE(),
84
+ address(instance));
85
+
86
+ if(!hasRole) {
87
+ revert ExpectedRoleMissing(POOL_OWNER_ROLE(), poolOwner);
88
+ }
89
+
90
+ poolNftId = info.nftId;
91
+ ISetup.PoolSetupInfo memory initialSetup = _decodeAndVerifyPoolSetup(data);
92
+ instance.createPoolSetup(poolNftId, initialSetup);
93
+ }
94
+
95
+ function _decodeAndVerifyPoolSetup(bytes memory data) internal returns(ISetup.PoolSetupInfo memory setup)
96
+ {
97
+ setup = abi.decode(
98
+ data,
70
99
  (ISetup.PoolSetupInfo)
71
100
  );
72
- instance.createPoolSetup(componentNftId, initialSetup);
101
+
102
+ // TODO add checks if applicable
73
103
  }
74
104
 
75
105
  function setFees(
@@ -91,197 +121,4 @@ contract PoolService is
91
121
 
92
122
  instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
93
123
  }
94
-
95
- function createBundle(
96
- address owner,
97
- Fee memory fee,
98
- uint256 stakingAmount,
99
- uint256 lifetime,
100
- bytes calldata filter
101
- )
102
- external
103
- override
104
- returns(NftId bundleNftId)
105
- {
106
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
107
- InstanceReader instanceReader = instance.getInstanceReader();
108
- NftId poolNftId = info.nftId;
109
-
110
- IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
111
- poolNftId,
112
- fee,
113
- filter,
114
- stakingAmount,
115
- 0,
116
- stakingAmount,
117
- lifetime,
118
- zeroTimestamp(),
119
- zeroTimestamp()
120
- );
121
-
122
- // register bundle with registry
123
- bundleNftId = getRegistryService().registerBundle(
124
- IRegistry.ObjectInfo(
125
- zeroNftId(),
126
- poolNftId,
127
- BUNDLE(),
128
- false, // intercepting property for bundles is defined on pool
129
- address(0),
130
- owner,
131
- abi.encode(bundleInfo)
132
- )
133
- );
134
-
135
- // create bundle info in instance
136
- instance.createBundle(bundleNftId, bundleInfo);
137
-
138
- BundleManager bundleManager = instance.getBundleManager();
139
- bundleManager.add(bundleNftId);
140
-
141
- _processStakingByTreasury(
142
- instanceReader,
143
- poolNftId,
144
- bundleNftId,
145
- stakingAmount);
146
-
147
- // TODO add logging
148
- }
149
-
150
- function setBundleFee(
151
- NftId bundleNftId,
152
- Fee memory fee
153
- )
154
- external
155
- override
156
- {
157
- (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
158
- InstanceReader instanceReader = instance.getInstanceReader();
159
- NftId poolNftId = info.nftId;
160
-
161
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
162
- require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
163
- require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
164
-
165
- bundleInfo.fee = fee;
166
-
167
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
168
- }
169
-
170
- function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
171
- external
172
- onlyService
173
- {
174
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
175
- IInstance instance = IInstance(instanceInfo.objectAddress);
176
- instance.updateBundle(bundleNftId, bundleInfo, state);
177
- }
178
-
179
- function lockBundle(NftId bundleNftId)
180
- external
181
- {
182
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
183
- BundleManager bundleManager = instance.getBundleManager();
184
- bundleManager.lock(bundleNftId);
185
- }
186
-
187
- function unlockBundle(NftId bundleNftId)
188
- external
189
- {
190
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
191
- BundleManager bundleManager = instance.getBundleManager();
192
- bundleManager.unlock(bundleNftId);
193
- }
194
-
195
- function underwritePolicy(IInstance instance,
196
- NftId policyNftId,
197
- NftId bundleNftId,
198
- uint256 collateralAmount,
199
- uint256 netPremiumAmount
200
- )
201
- external
202
- onlyService
203
- {
204
- InstanceReader instanceReader = instance.getInstanceReader();
205
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
206
-
207
- // lock collateral
208
- bundleInfo.lockedAmount += collateralAmount;
209
- bundleInfo.balanceAmount += netPremiumAmount;
210
-
211
- instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
212
-
213
- linkPolicy(instance, policyNftId);
214
- }
215
-
216
- /// @dev links policy to bundle
217
- function linkPolicy(IInstance instance, NftId policyNftId)
218
- internal
219
- onlyService
220
- {
221
- InstanceReader instanceReader = instance.getInstanceReader();
222
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
223
-
224
- // ensure policy has not yet been activated
225
- if (policyInfo.activatedAt.gtz()) {
226
- revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
227
- }
228
-
229
- BundleManager bundleManager = instance.getBundleManager();
230
- bundleManager.linkPolicy(policyNftId);
231
- }
232
-
233
- /// @dev unlinks policy from bundle
234
- function unlinkPolicy(IInstance instance, NftId policyNftId)
235
- internal
236
- onlyService
237
- {
238
- InstanceReader instanceReader = instance.getInstanceReader();
239
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
240
-
241
- // ensure policy has no open claims
242
- if (policyInfo.openClaimsCount > 0) {
243
- revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
244
- policyNftId,
245
- policyInfo.openClaimsCount);
246
- }
247
-
248
- // ensure policy is closeable
249
- if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
250
- || policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
251
- {
252
- revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
253
- }
254
-
255
- BundleManager bundleManager = instance.getBundleManager();
256
- bundleManager.unlinkPolicy(policyNftId);
257
- }
258
-
259
- function _processStakingByTreasury(
260
- InstanceReader instanceReader,
261
- NftId poolNftId,
262
- NftId bundleNftId,
263
- uint256 stakingAmount
264
- )
265
- internal
266
- {
267
- // process token transfer(s)
268
- if(stakingAmount > 0) {
269
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
270
- TokenHandler tokenHandler = poolInfo.tokenHandler;
271
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
272
- Fee memory stakingFee = poolInfo.stakingFee;
273
-
274
- tokenHandler.transfer(
275
- bundleOwner,
276
- poolInfo.wallet,
277
- stakingAmount
278
- );
279
-
280
-
281
- if (! FeeLib.feeIsZero(stakingFee)) {
282
- (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
283
- // TODO: track staking fees in pool's state (issue #177)
284
- }
285
- }
286
- }
287
124
  }