Skip to content

Commit c7c1f2a

Browse files
authored
Merge pull request #8 from euler-xyz/getReserves-fn
Feat: expose getReserves() function
2 parents 46f4f2c + 75574fa commit c7c1f2a

File tree

4 files changed

+35
-19
lines changed

4 files changed

+35
-19
lines changed

src/MaglevBase.sol

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ abstract contract MaglevBase is IMaglevBase, EVCUtil {
1717
uint112 public immutable debtLimit1;
1818
uint256 public immutable feeMultiplier;
1919

20-
uint112 public reserve0;
21-
uint112 public reserve1;
22-
uint32 public locked;
20+
uint112 internal reserve0;
21+
uint112 internal reserve1;
22+
uint32 internal locked; // uses single storage slot, accessible via getReserves()
2323

2424
error Locked();
2525
error Overflow();
@@ -116,6 +116,10 @@ abstract contract MaglevBase is IMaglevBase, EVCUtil {
116116
}
117117
}
118118

119+
function getReserves() public view returns (uint112, uint112, uint32) {
120+
return (reserve0, reserve1, locked);
121+
}
122+
119123
function quoteExactInput(address tokenIn, address tokenOut, uint256 amountIn) external view returns (uint256) {
120124
return _computeQuote(tokenIn, tokenOut, amountIn, true);
121125
}

src/interfaces/IMaglevBase.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,5 @@ interface IMaglevBase {
1515
function debtLimit0() external view returns (uint112);
1616
function debtLimit1() external view returns (uint112);
1717
function feeMultiplier() external view returns (uint256);
18-
function reserve0() external view returns (uint112);
19-
function reserve1() external view returns (uint112);
18+
function getReserves() external view returns (uint112, uint112, uint32);
2019
}

test/ConstantSum.t.sol

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ contract ConstantSumTest is MaglevTestBase {
5858
}
5959

6060
function test_reserveLimit() public monotonicHolderNAV {
61-
assertEq(maglev.reserve0(), 60e18);
62-
assertEq(maglev.reserve1(), 60e18);
61+
(uint112 reserve0, uint112 reserve1,) = maglev.getReserves();
62+
assertEq(reserve0, 60e18);
63+
assertEq(reserve1, 60e18);
6364

6465
assetTST.mint(address(this), 1000e18);
6566

@@ -80,38 +81,48 @@ contract ConstantSumTest is MaglevTestBase {
8081
maglev.swap(0, amount, address(this), "");
8182
}
8283

84+
(reserve0, reserve1,) = maglev.getReserves();
85+
8386
assertEq(eTST.balanceOf(holder), 70e18);
8487
assertEq(eTST2.debtOf(holder), 50e18);
85-
assertEq(maglev.reserve0(), 120e18);
86-
assertEq(maglev.reserve1(), 0e18);
88+
assertEq(reserve0, 120e18);
89+
assertEq(reserve1, 0e18);
8790

8891
// Same debt limit means reserves not affected
8992

9093
createMaglev(50e18, 50e18, 0, 1, 1);
9194

92-
assertEq(maglev.reserve0(), 120e18);
93-
assertEq(maglev.reserve1(), 0e18);
95+
(reserve0, reserve1,) = maglev.getReserves();
96+
97+
assertEq(reserve0, 120e18);
98+
assertEq(reserve1, 0e18);
9499

95100
// Increase debt limit on one side
96101

97102
createMaglev(50e18, 55e18, 0, 1, 1);
98103

99-
assertEq(maglev.reserve0(), 120e18);
100-
assertEq(maglev.reserve1(), 5e18);
104+
(reserve0, reserve1,) = maglev.getReserves();
105+
106+
assertEq(reserve0, 120e18);
107+
assertEq(reserve1, 5e18);
101108

102109
// And the other
103110

104111
createMaglev(55e18, 55e18, 0, 1, 1);
105112

106-
assertEq(maglev.reserve0(), 125e18);
107-
assertEq(maglev.reserve1(), 5e18);
113+
(reserve0, reserve1,) = maglev.getReserves();
114+
115+
assertEq(reserve0, 125e18);
116+
assertEq(reserve1, 5e18);
108117

109118
// Shrink debt limit
110119

111120
createMaglev(40e18, 45e18, 0, 1, 1);
112121

113-
assertEq(maglev.reserve0(), 110e18);
114-
assertEq(maglev.reserve1(), 0e18); // can't go below 0
122+
(reserve0, reserve1,) = maglev.getReserves();
123+
124+
assertEq(reserve0, 110e18);
125+
assertEq(reserve1, 0e18); // can't go below 0
115126
}
116127

117128
function test_basicSwapFuzz(uint256 amount1, uint256 amount2) public monotonicHolderNAV {

test/MaglevTestBase.t.sol

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,16 @@ contract MaglevTestBase is EVaultTestBase {
9191
}
9292

9393
function logState(address ml) internal view {
94+
(uint112 reserve0, uint112 reserve1,) = MaglevBase(ml).getReserves();
95+
9496
console.log("--------------------");
9597
console.log("Account States:");
9698
console.log("HOLDER");
9799
console.log(" eTST Vault assets: ", eTST.convertToAssets(eTST.balanceOf(holder)));
98100
console.log(" eTST Vault debt: ", eTST.debtOf(holder));
99101
console.log(" eTST2 Vault assets: ", eTST2.convertToAssets(eTST2.balanceOf(holder)));
100102
console.log(" eTST2 Vault debt: ", eTST2.debtOf(holder));
101-
console.log(" reserve0: ", MaglevBase(ml).reserve0());
102-
console.log(" reserve1: ", MaglevBase(ml).reserve1());
103+
console.log(" reserve0: ", reserve0);
104+
console.log(" reserve1: ", reserve1);
103105
}
104106
}

0 commit comments

Comments
 (0)