Skip to content

Commit 69245d0

Browse files
update factory
1 parent db650f3 commit 69245d0

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed

foundry.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ src = "src"
33
out = "out"
44
libs = ["lib"]
55
solc = "0.8.27"
6+
optimizer = true
7+
optimizer_runs = 800
8+
gas_reports = ["*"]
69

710
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options

src/MaglevEulerSwapFactory.sol

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ contract MaglevEulerSwapFactory is IMaglevEulerSwapFactory, Ownable {
1818
/// @dev An array to store all pools addresses.
1919
address[] public allPools;
2020
/// @dev Mapping from asset0/asset1/fee => pool address.
21-
mapping(address => mapping(address => mapping(uint256 => address))) public getPool;
21+
mapping(bytes32 => address) public getPool;
2222

2323
constructor(address evcAddr) Ownable(msg.sender) {
2424
evc = evcAddr;
@@ -29,13 +29,13 @@ contract MaglevEulerSwapFactory is IMaglevEulerSwapFactory, Ownable {
2929
address vault0,
3030
address vault1,
3131
address holder,
32-
uint112 debtLimit0,
33-
uint112 debtLimit1,
3432
uint256 fee,
3533
uint256 priceX,
3634
uint256 priceY,
3735
uint256 concentrationX,
38-
uint256 concentrationY
36+
uint256 concentrationY,
37+
uint112 debtLimit0,
38+
uint112 debtLimit1
3939
) external onlyOwner returns (address) {
4040
Maglev pool = new Maglev(
4141
MaglevBase.BaseParams({
@@ -58,11 +58,18 @@ contract MaglevEulerSwapFactory is IMaglevEulerSwapFactory, Ownable {
5858
address poolAsset0 = pool.asset0();
5959
address poolAsset1 = pool.asset1();
6060
uint256 feeMultiplier = pool.feeMultiplier();
61+
address myAccount = pool.myAccount();
62+
uint256 priceX = pool.priceX();
63+
uint256 priceY = pool.priceY();
64+
uint256 concentrationX = pool.concentrationX();
65+
uint256 concentrationY = pool.concentrationY();
6166

62-
getPool[poolAsset0][poolAsset1][feeMultiplier] = address(pool);
63-
// populate mapping in the reverse direction, deliberate choice to avoid the cost of comparing addresses
64-
getPool[poolAsset1][poolAsset0][feeMultiplier] = address(pool);
6567

68+
bytes32 poolKey = keccak256(
69+
abi.encode(poolAsset0, poolAsset1, feeMultiplier, myAccount, priceX, priceY, concentrationX, concentrationY)
70+
);
71+
72+
getPool[poolKey] = address(pool);
6673
allPools.push(address(pool));
6774

6875
emit PoolDeployed(poolAsset0, poolAsset1, feeMultiplier, address(pool));

src/interfaces/IMaglevEulerSwapFactory.sol

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ interface IMaglevEulerSwapFactory {
66
address vault0,
77
address vault1,
88
address holder,
9-
uint112 debtLimit0,
10-
uint112 debtLimit1,
119
uint256 fee,
1210
uint256 priceX,
1311
uint256 priceY,
1412
uint256 concentrationX,
15-
uint256 concentrationY
13+
uint256 concentrationY,
14+
uint112 debtLimit0,
15+
uint112 debtLimit1
1616
) external returns (address);
1717

1818
function evc() external view returns (address);
1919
function allPools(uint256 index) external view returns (address);
20-
function getPool(address assetA, address assetB, uint256 fee) external view returns (address);
20+
function getPool(bytes32 poolKey) external view returns (address);
2121
function allPoolsLength() external view returns (uint256);
2222
function getAllPoolsListSlice(uint256 start, uint256 end) external view returns (address[] memory);
2323
}

test/MaglevEulerSwapFactoryTest.t.sol

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,27 @@ contract MaglevEulerSwapFactoryTest is MaglevTestBase {
2626
vm.prank(creator);
2727
Maglev maglev = Maglev(
2828
eulerSwapFactory.deployPool(
29-
address(eTST), address(eTST2), holder, 50e18, 50e18, 0, 1e18, 1e18, 0.4e18, 0.85e18
29+
address(eTST), address(eTST2), holder, 0, 1e18, 1e18, 0.4e18, 0.85e18, 50e18, 50e18
3030
)
3131
);
3232

3333
uint256 allPoolsLengthAfter = eulerSwapFactory.allPoolsLength();
34+
bytes32 poolKey = keccak256(
35+
abi.encode(
36+
maglev.asset0(),
37+
maglev.asset1(),
38+
maglev.feeMultiplier(),
39+
maglev.myAccount(),
40+
maglev.priceX(),
41+
maglev.priceY(),
42+
maglev.concentrationX(),
43+
maglev.concentrationY()
44+
)
45+
);
3446

3547
assertEq(allPoolsLengthAfter - allPoolsLengthBefore, 1);
36-
assertEq(eulerSwapFactory.getPool(maglev.asset0(), maglev.asset1(), maglev.feeMultiplier()), address(maglev));
37-
assertEq(eulerSwapFactory.getPool(maglev.asset1(), maglev.asset0(), maglev.feeMultiplier()), address(maglev));
48+
assertEq(eulerSwapFactory.getPool(poolKey), address(maglev));
49+
assertEq(eulerSwapFactory.getPool(poolKey), address(maglev));
3850

3951
address[] memory poolsList = eulerSwapFactory.getAllPoolsListSlice(0, type(uint256).max);
4052
assertEq(poolsList.length, 1);
@@ -50,14 +62,14 @@ contract MaglevEulerSwapFactoryTest is MaglevTestBase {
5062
function testDeployWithUnsupportedPair() public {
5163
vm.prank(creator);
5264
vm.expectRevert(MaglevBase.UnsupportedPair.selector);
53-
eulerSwapFactory.deployPool(address(eTST), address(eTST), holder, 50e18, 50e18, 0, 1e18, 1e18, 0.4e18, 0.85e18);
65+
eulerSwapFactory.deployPool(address(eTST), address(eTST), holder, 0, 1e18, 1e18, 0.4e18, 0.85e18, 50e18, 50e18);
5466
}
5567

5668
function testDeployWithBadFee() public {
5769
vm.prank(creator);
5870
vm.expectRevert(MaglevBase.BadFee.selector);
5971
eulerSwapFactory.deployPool(
60-
address(eTST), address(eTST2), holder, 50e18, 50e18, 1e18, 1e18, 1e18, 0.4e18, 0.85e18
72+
address(eTST), address(eTST2), holder, 1e18, 1e18, 1e18, 0.4e18, 0.85e18, 50e18, 50e18
6173
);
6274
}
6375
}

0 commit comments

Comments
 (0)