Skip to content

Commit 7f9826c

Browse files
committed
wip
1 parent 7fe863c commit 7f9826c

File tree

12 files changed

+489
-45
lines changed

12 files changed

+489
-45
lines changed

TODO

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
admin methods
12
reserves
23
hook operations
34
early repay fees
5+
history
46

57
lens
68
UI

script/DeployScenario.s.sol

Lines changed: 5 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {Script, console} from "forge-std/Script.sol";
88
// Deploy base
99

1010
import {GenericFactory} from "evk/GenericFactory/GenericFactory.sol";
11+
import {EulerRouterFactory} from "../src/vendor/EulerRouterFactory/EulerRouterFactory.sol";
1112

1213
import {EVault} from "evk/EVault/EVault.sol";
1314
import {ProtocolConfig} from "evk/ProtocolConfig/ProtocolConfig.sol";
@@ -36,19 +37,6 @@ import {IRMTestDefault} from "evk-test/mocks/IRMTestDefault.sol";
3637
import {IHookTarget} from "evk/interfaces/IHookTarget.sol";
3738
import {SequenceRegistry} from "evk/SequenceRegistry/SequenceRegistry.sol";
3839

39-
// Euler swap
40-
41-
import {TestERC20} from "evk-test/unit/evault/EVaultTestBase.t.sol";
42-
import {IEVault} from "evk/EVault/IEVault.sol";
43-
import {IEulerSwap, IEVC, EulerSwap} from "euler-swap/EulerSwap.sol";
44-
import {EulerSwapFactory} from "euler-swap/EulerSwapFactory.sol";
45-
import {EulerSwapPeriphery} from "euler-swap/EulerSwapPeriphery.sol";
46-
import {PoolManagerDeployer} from "euler-swap/../test/utils/PoolManagerDeployer.sol";
47-
48-
// Maglev stuff
49-
50-
import {MaglevLens} from "src/MaglevLens.sol";
51-
5240
struct Asset {
5341
string symbol;
5442
address asset;
@@ -83,6 +71,7 @@ contract DeployScenario is Script {
8371
address permit2;
8472
address sequenceRegistry;
8573
GenericFactory public factory;
74+
EulerRouterFactory routerFactory;
8675

8776
Base.Integrations integrations;
8877
Dispatch.DeployedModules modules;
@@ -118,24 +107,11 @@ contract DeployScenario is Script {
118107
TestERC20 assetUSDZ;
119108
IEVault eUSDZ;
120109

121-
//////// EulerSwap
122-
123-
address poolManager;
124-
address eulerSwapImpl;
125-
EulerSwapFactory eulerSwapFactory;
126-
EulerSwapPeriphery eulerSwapPeriphery;
127-
128-
//////// Maglev
129-
130-
MaglevLens maglevLens;
131-
132110
function run() public {
133111
vm.startBroadcast(user3PK);
134112

135113
deployEulerSystem();
136114
deployAssets();
137-
deployEulerSwap();
138-
deployMaglevLens();
139115

140116
vm.stopBroadcast();
141117

@@ -148,9 +124,11 @@ contract DeployScenario is Script {
148124
admin = makeAddr("admin");
149125
feeReceiver = makeAddr("feeReceiver");
150126
protocolFeeReceiver = makeAddr("protocolFeeReceiver");
151-
factory = new GenericFactory(user3);
152127

153128
evc = new EthereumVaultConnector();
129+
factory = new GenericFactory(user3);
130+
routerFactory = new EulerRouterFactory(address(evc));
131+
154132
protocolConfig = new ProtocolConfig(admin, protocolFeeReceiver);
155133
balanceTracker = address(new MockBalanceTracker());
156134
oracle = new MockPriceOracle();
@@ -267,24 +245,6 @@ contract DeployScenario is Script {
267245
}
268246
}
269247

270-
function deployEulerSwap() internal {
271-
poolManager = address(PoolManagerDeployer.deploy(address(0)));
272-
eulerSwapImpl = address(new EulerSwap(address(evc), poolManager));
273-
eulerSwapFactory = new EulerSwapFactory(address(evc), address(factory), eulerSwapImpl, address(0), address(0));
274-
eulerSwapPeriphery = new EulerSwapPeriphery();
275-
276-
string memory result = vm.serializeAddress("eulerSwap", "eulerSwapFactory", address(eulerSwapFactory));
277-
result = vm.serializeAddress("eulerSwap", "eulerSwapPeriphery", address(eulerSwapPeriphery));
278-
vm.writeJson(result, "./dev-ctx/addresses/31337/EulerSwapAddresses.json");
279-
}
280-
281-
function deployMaglevLens() internal {
282-
maglevLens = new MaglevLens();
283-
284-
string memory result = vm.serializeAddress("maglev", "maglevLens", address(maglevLens));
285-
vm.writeJson(result, "./dev-ctx/addresses/31337/MaglevAddresses.json");
286-
}
287-
288248
function getSubaccount(address user, uint8 account) internal pure returns (address) {
289249
return address(uint160(user) ^ account);
290250
}

script/scenarios/EulerSwapBasic.s.sol

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,39 @@
11
// SPDX-License-Identifier: UNLICENSED
22
pragma solidity ^0.8.27;
33

4+
// Euler swap
5+
6+
import {IEVault} from "evk/EVault/IEVault.sol";
7+
import {IEulerSwap, IEVC, EulerSwap} from "euler-swap/EulerSwap.sol";
8+
import {EulerSwapFactory} from "euler-swap/EulerSwapFactory.sol";
9+
import {EulerSwapPeriphery} from "euler-swap/EulerSwapPeriphery.sol";
10+
import {PoolManagerDeployer} from "euler-swap/../test/utils/PoolManagerDeployer.sol";
11+
12+
// Maglev stuff
13+
14+
import {MaglevLens} from "src/MaglevLens.sol";
15+
16+
417
import {DeployScenario} from "../DeployScenario.s.sol";
518

619
contract EulerSwapBasic is DeployScenario {
20+
//////// EulerSwap
21+
22+
address poolManager;
23+
address eulerSwapImpl;
24+
EulerSwapFactory eulerSwapFactory;
25+
EulerSwapPeriphery eulerSwapPeriphery;
26+
27+
//////// Maglev
28+
29+
MaglevLens maglevLens;
30+
731
function setup() internal virtual override {
832
vm.startBroadcast(user0PK);
933

34+
deployEulerSwap();
35+
deployMaglevLens();
36+
1037
giveLotsOfCash(user0);
1138

1239
// Deposit some assets
@@ -29,4 +56,22 @@ contract EulerSwapBasic is DeployScenario {
2956

3057
vm.stopBroadcast();
3158
}
59+
60+
function deployEulerSwap() internal {
61+
poolManager = address(PoolManagerDeployer.deploy(address(0)));
62+
eulerSwapImpl = address(new EulerSwap(address(evc), poolManager));
63+
eulerSwapFactory = new EulerSwapFactory(address(evc), address(factory), eulerSwapImpl, address(0), address(0));
64+
eulerSwapPeriphery = new EulerSwapPeriphery();
65+
66+
string memory result = vm.serializeAddress("eulerSwap", "eulerSwapFactory", address(eulerSwapFactory));
67+
result = vm.serializeAddress("eulerSwap", "eulerSwapPeriphery", address(eulerSwapPeriphery));
68+
vm.writeJson(result, "./dev-ctx/addresses/31337/EulerSwapAddresses.json");
69+
}
70+
71+
function deployMaglevLens() internal {
72+
maglevLens = new MaglevLens();
73+
74+
string memory result = vm.serializeAddress("maglev", "maglevLens", address(maglevLens));
75+
vm.writeJson(result, "./dev-ctx/addresses/31337/MaglevAddresses.json");
76+
}
3277
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity ^0.8.27;
3+
4+
import {DeployScenario} from "../DeployScenario.s.sol";
5+
6+
import {LayerCredit} from "../../src/LayerCredit.sol";
7+
import {LayerCreditLens} from "../../src/LayerCreditLens.sol";
8+
9+
contract LayerCreditBasic is DeployScenario {
10+
LayerCredit layerCredit;
11+
LayerCreditLens layerCreditLens;
12+
13+
function setup() internal virtual override {
14+
vm.startBroadcast(user0PK);
15+
16+
giveLotsOfCash(user0);
17+
18+
// Deposit some assets
19+
20+
assetUSDC.approve(address(eUSDC), type(uint256).max);
21+
eUSDC.deposit(20000e6, user0);
22+
23+
assetUSDT.approve(address(eUSDT), type(uint256).max);
24+
eUSDT.deposit(10000e6, user0);
25+
26+
assetWETH.approve(address(eWETH), type(uint256).max);
27+
eWETH.deposit(10e18, user0);
28+
29+
assetUSDZ.approve(address(eUSDZ), type(uint256).max);
30+
eUSDZ.deposit(10000e6, user0);
31+
32+
// Some extra USDT to subaccount 1
33+
assetUSDT.approve(address(eUSDT), type(uint256).max);
34+
eUSDT.deposit(5000e6, getSubaccount(user0, 1));
35+
36+
vm.stopBroadcast();
37+
}
38+
39+
function deployLayerCredit() internal {
40+
layerCredit = new LayerCredit(address(evc), address(factory), address(routerFactory), address(0));
41+
layerCreditLens = new LayerCreditLens();
42+
43+
string memory result = vm.serializeAddress("layerCredit", "layerCredit", address(layerCredit));
44+
result = vm.serializeAddress("layerCredit", "layerCreditLens", address(layerCreditLens));
45+
vm.writeJson(result, "./dev-ctx/addresses/31337/LayerCredit.json");
46+
}
47+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
3+
pragma solidity ^0.8.0;
4+
5+
import {IFactory} from "./interfaces/IFactory.sol";
6+
7+
/// @title BaseFactory
8+
/// @custom:security-contact [email protected]
9+
/// @author Euler Labs (https://www.eulerlabs.com/)
10+
/// @notice A minimal factory for deploying various contracts.
11+
abstract contract BaseFactory is IFactory {
12+
/// @notice Contracts deployed by the factory.
13+
mapping(address => DeploymentInfo) internal deploymentInfo;
14+
15+
/// @notice An array of addresses of all the contracts deployed by the factory
16+
address[] public deployments;
17+
18+
/// @inheritdoc IFactory
19+
function getDeploymentInfo(address contractAddress) external view returns (address deployer, uint96 deployedAt) {
20+
DeploymentInfo memory info = deploymentInfo[contractAddress];
21+
return (info.deployer, info.deployedAt);
22+
}
23+
24+
/// @inheritdoc IFactory
25+
function isValidDeployment(address contractAddress) external view returns (bool) {
26+
return deploymentInfo[contractAddress].deployedAt != 0;
27+
}
28+
29+
/// @inheritdoc IFactory
30+
function getDeploymentsListLength() external view returns (uint256) {
31+
return deployments.length;
32+
}
33+
34+
/// @inheritdoc IFactory
35+
function getDeploymentsListSlice(uint256 start, uint256 end) external view returns (address[] memory list) {
36+
if (end == type(uint256).max) end = deployments.length;
37+
if (end < start || end > deployments.length) revert Factory_BadQuery();
38+
39+
list = new address[](end - start);
40+
for (uint256 i; i < end - start; ++i) {
41+
list[i] = deployments[start + i];
42+
}
43+
}
44+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
3+
pragma solidity >=0.8.0;
4+
5+
/// @title IFactory
6+
/// @custom:security-contact [email protected]
7+
/// @author Euler Labs (https://www.eulerlabs.com/)
8+
/// @notice A minimal factory interface for deploying contracts.
9+
interface IFactory {
10+
struct DeploymentInfo {
11+
/// @notice The sender of the deployment call.
12+
address deployer;
13+
/// @notice The timestamp when the contract was deployed.
14+
uint96 deployedAt;
15+
}
16+
17+
/// @notice An instance of a contract was deployed.
18+
/// @param deployedContract The deployment address of the contract.
19+
/// @param deployer The sender of the deployment call.
20+
/// @param deployedAt The deployment timestamp of the contract.
21+
event ContractDeployed(address indexed deployedContract, address indexed deployer, uint256 deployedAt);
22+
23+
/// @notice Error thrown when the query is incorrect.
24+
error Factory_BadQuery();
25+
26+
/// @notice Contracts deployed by the factory.
27+
function getDeploymentInfo(address contractAddress) external view returns (address deployer, uint96 deployedAt);
28+
29+
/// @notice Checks if the deployment at the given address is valid.
30+
/// @param contractAddress The address of the contract to check.
31+
/// @return True if the deployment is valid, false otherwise.
32+
function isValidDeployment(address contractAddress) external view returns (bool);
33+
34+
/// @notice Returns the number of contracts deployed by the factory.
35+
/// @return The number of deployed contracts.
36+
function getDeploymentsListLength() external view returns (uint256);
37+
38+
/// @notice Returns a slice of the list of deployments.
39+
/// @param start The starting index of the slice.
40+
/// @param end The ending index of the slice (exclusive).
41+
/// @return list An array of addresses of the deployed contracts in the specified range.
42+
function getDeploymentsListSlice(uint256 start, uint256 end) external view returns (address[] memory list);
43+
}

0 commit comments

Comments
 (0)