@@ -23,39 +23,14 @@ contract LiquidityHub is ERC4626Upgradeable, AccessControlUpgradeable {
2323 bytes32 public constant ASSETS_ADJUST_ROLE = "ASSETS_ADJUST_ROLE " ;
2424
2525 event TotalAssetsAdjustment (uint256 oldAssets , uint256 newAssets );
26- event DepositRequest (address caller , address receiver , uint256 assets );
27- event WithdrawRequest (address caller , address receiver , address owner , uint256 shares );
2826
2927 error ZeroAddress ();
3028 error NotImplemented ();
3129 error IncompatibleAssetsAndShares ();
3230
33- struct AdjustmentRecord {
34- uint256 totalAssets;
35- uint256 totalShares;
36- }
37-
38- struct PendingDeposit {
39- uint256 assets;
40- uint256 adjustmentId;
41- }
42-
43- struct PendingWithdraw {
44- uint256 shares;
45- uint256 adjustmentId;
46- }
47-
4831 /// @custom:storage-location erc7201:sprinter.storage.LiquidityHub
4932 struct LiquidityHubStorage {
5033 uint256 totalAssets;
51- uint256 totalShares;
52- uint256 depositedAssets;
53- uint256 burnedShares;
54- uint256 releasedAssets;
55- uint256 lastAdjustmentId;
56- mapping (uint256 adjustmentId = > AdjustmentRecord) adjustmentRecords;
57- mapping (address receiver = > PendingDeposit) pendingDeposits;
58- mapping (address receiver = > PendingWithdraw) pendingWithdrawals;
5934 }
6035
6136 bytes32 private constant StorageLocation = 0xb877bfaae1674461dd1960c90f24075e3de3265a91f6906fe128ab8da6ba1700 ;
@@ -86,20 +61,9 @@ contract LiquidityHub is ERC4626Upgradeable, AccessControlUpgradeable {
8661
8762 function adjustTotalAssets (uint256 amount , bool isIncrease ) external onlyRole (ASSETS_ADJUST_ROLE) {
8863 LiquidityHubStorage storage $ = _getStorage ();
89- uint256 adjustmentId = ++ $.lastAdjustmentId;
90- AdjustmentRecord storage adjustmentRecord = $.adjustmentRecords[adjustmentId];
9164 uint256 assets = $.totalAssets;
9265 uint256 newAssets = isIncrease ? assets + amount : assets - amount;
93- uint256 supplyShares = $.totalShares;
94- uint256 mintingShares = _toShares ($.depositedAssets, supplyShares, newAssets, Math.Rounding.Floor);
95- uint256 releasingAssets = _toAssets ($.burnedShares, supplyShares, newAssets, Math.Rounding.Floor);
96- $.totalAssets = newAssets + $.depositedAssets - releasingAssets;
97- $.totalShares = supplyShares + mintingShares - $.burnedShares;
98- $.depositedAssets = 0 ;
99- $.burnedShares = 0 ;
100- $.releasedAssets += releasingAssets;
101- adjustmentRecord.totalAssets = $.totalAssets;
102- adjustmentRecord.totalShares = $.totalShares;
66+ $.totalAssets = newAssets;
10367 emit TotalAssetsAdjustment (assets, newAssets);
10468 }
10569
@@ -116,11 +80,11 @@ contract LiquidityHub is ERC4626Upgradeable, AccessControlUpgradeable {
11680 }
11781
11882 function totalSupply () public view virtual override (IERC20 , ERC20Upgradeable ) returns (uint256 ) {
119- return _getStorage ().totalShares ;
83+ return IERC20 ( address (SHARES)). totalSupply () ;
12084 }
12185
12286 function balanceOf (address owner ) public view virtual override (IERC20 , ERC20Upgradeable ) returns (uint256 ) {
123- return IERC20 (address (SHARES)).balanceOf (owner) + _simulateSettleDeposit (owner) ;
87+ return IERC20 (address (SHARES)).balanceOf (owner);
12488 }
12589
12690 function transfer (address , uint256 ) public pure override (IERC20 , ERC20Upgradeable ) returns (bool ) {
@@ -144,23 +108,6 @@ contract LiquidityHub is ERC4626Upgradeable, AccessControlUpgradeable {
144108 return _getStorage ().totalAssets;
145109 }
146110
147- function releasedAssets () external view returns (uint256 ) {
148- return _getStorage ().releasedAssets;
149- }
150-
151- function settle (address receiver ) external {
152- _settleDeposit (receiver, receiver);
153- _settleWithdraw (receiver, receiver, receiver);
154- }
155-
156- function settleDeposit (address receiver ) external {
157- _settleDeposit (receiver, receiver);
158- }
159-
160- function settleWithdraw (address receiver ) external {
161- _settleWithdraw (receiver, receiver, receiver);
162- }
163-
164111 function depositWithPermit (
165112 uint256 assets ,
166113 address receiver ,
@@ -233,89 +180,28 @@ contract LiquidityHub is ERC4626Upgradeable, AccessControlUpgradeable {
233180 SHARES.spendAllowance (owner, spender, value);
234181 }
235182
236- function _deposit (address caller , address receiver , uint256 assets , uint256 /*shares*/ ) internal virtual override {
237- _settleWithdraw (caller, caller, caller);
238- _settleDeposit (caller, receiver);
183+ function _deposit (address caller , address receiver , uint256 assets , uint256 shares ) internal virtual override {
239184 LiquidityHubStorage storage $ = _getStorage ();
240185 SafeERC20.safeTransferFrom (IERC20 (asset ()), caller, address (LIQUIDITY_POOL), assets);
241- PendingDeposit storage pendingDeposit = $.pendingDeposits[receiver];
242- pendingDeposit.assets += assets;
243- pendingDeposit.adjustmentId = $.lastAdjustmentId;
244- $.depositedAssets += assets;
245- LIQUIDITY_POOL.deposit ();
246- emit DepositRequest (caller, receiver, assets);
247- }
248-
249- function _simulateSettleDeposit (address receiver ) internal view returns (uint256 ) {
250- LiquidityHubStorage storage $ = _getStorage ();
251- PendingDeposit storage pendingDeposit = $.pendingDeposits[receiver];
252- uint256 assets = pendingDeposit.assets;
253- if (assets == 0 ) {
254- return 0 ;
255- }
256- uint256 settleAdjustmentId = pendingDeposit.adjustmentId + 1 ;
257- if (settleAdjustmentId > $.lastAdjustmentId) {
258- return 0 ;
259- }
260- AdjustmentRecord memory adjustmentRecord = $.adjustmentRecords[settleAdjustmentId];
261- uint256 shares = _toShares (
262- assets, adjustmentRecord.totalShares, adjustmentRecord.totalAssets, Math.Rounding.Floor
263- );
264- return shares;
265- }
266-
267- function _settleDeposit (address caller , address receiver ) internal {
268- uint256 shares = _simulateSettleDeposit (receiver);
269- if (shares == 0 ) {
270- return ;
271- }
272- PendingDeposit storage pendingDeposit = _getStorage ().pendingDeposits[receiver];
273- uint256 assets = pendingDeposit.assets;
274- pendingDeposit.assets = 0 ;
275- pendingDeposit.adjustmentId = 0 ;
276186 _mint (receiver, shares);
187+ $.totalAssets += assets;
188+ LIQUIDITY_POOL.deposit ();
277189 emit Deposit (caller, receiver, assets, shares);
278190 }
279191
280192 function _withdraw (
281193 address caller ,
282194 address receiver ,
283195 address owner ,
284- uint256 /* assets*/ ,
196+ uint256 assets ,
285197 uint256 shares
286198 ) internal virtual override {
287- _settleDeposit (caller, owner);
288- _settleWithdraw (caller, receiver, owner);
289199 LiquidityHubStorage storage $ = _getStorage ();
290200 if (caller != owner) {
291201 _spendAllowance (owner, caller, shares);
292202 }
293- PendingWithdraw storage pendingWithdraw = $.pendingWithdrawals[receiver];
294- pendingWithdraw.shares += shares;
295- pendingWithdraw.adjustmentId = $.lastAdjustmentId;
296- $.burnedShares += shares;
203+ $.totalAssets -= assets;
297204 _burn (owner, shares);
298- emit WithdrawRequest (caller, receiver, owner, shares);
299- }
300-
301- function _settleWithdraw (address caller , address receiver , address owner ) internal {
302- LiquidityHubStorage storage $ = _getStorage ();
303- PendingWithdraw storage pendingWithdraw = $.pendingWithdrawals[receiver];
304- uint256 shares = pendingWithdraw.shares;
305- if (shares == 0 ) {
306- return ;
307- }
308- uint256 settleAdjustmentId = pendingWithdraw.adjustmentId + 1 ;
309- if (settleAdjustmentId > $.lastAdjustmentId) {
310- return ;
311- }
312- pendingWithdraw.shares = 0 ;
313- pendingWithdraw.adjustmentId = 0 ;
314- AdjustmentRecord memory adjustmentRecord = $.adjustmentRecords[settleAdjustmentId];
315- uint256 assets = _toAssets (
316- shares, adjustmentRecord.totalShares, adjustmentRecord.totalAssets, Math.Rounding.Floor
317- );
318- $.releasedAssets -= assets;
319205 LIQUIDITY_POOL.withdraw (receiver, assets);
320206 emit Withdraw (caller, receiver, owner, assets, shares);
321207 }
0 commit comments