Skip to content

Commit

Permalink
feat: SwapRouter periphery v1
Browse files Browse the repository at this point in the history
  • Loading branch information
kyriediculous committed Jul 3, 2024
1 parent 30a1486 commit 1ddd1de
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
4 changes: 4 additions & 0 deletions script/deploy.local.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { LpETH, ConstructorConfig } from "@/lpETH/LpETH.sol";
import { LPToken } from "@/lpETH/LPToken.sol";
import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import { ERC20 } from "solady/tokens/ERC20.sol";
import { SwapRouter } from "@/periphery/SwapRouter.sol";

// Adapters
import { Adapter } from "@/adapters/Adapter.sol";
Expand Down Expand Up @@ -74,6 +75,9 @@ contract DeployLocal is Script {
registryProxy.setAdapter(STETH_TOKEN, stETHAdapter);
console2.log("StETH Adapter: %s", address(stETHAdapter));

SwapRouter swapRouter = new SwapRouter();
console2.log("SwapRouter: %s", address(swapRouter));

vm.stopBroadcast();
}
}
20 changes: 19 additions & 1 deletion src/periphery/SwapRouter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ pragma solidity ^0.8.25;
import { LpETH } from "@/lpETH/LpETH.sol";
import { ERC20 } from "@solady/tokens/ERC20.sol";
import { SafeTransferLib } from "@solady/utils/SafeTransferLib.sol";
import { STETH_TOKEN } from "@/adapters/stETH/StETHAdapter.sol";
import { EETH_TOKEN } from "@/adapters/eETH/EETHAdapter.sol";

address constant WRAPPED_STETH = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0;
address constant WRAPPED_EETH = 0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee;
Expand All @@ -21,9 +23,25 @@ contract SwapRouter {
function swap(address tokenIn, uint256 amount, uint256 minOut) external returns (uint256 out) {
tokenIn.safeTransferFrom(msg.sender, address(this), amount);
if (tokenIn == WRAPPED_STETH || tokenIn == WRAPPED_EETH) {
amount = Unwrap(tokenIn).unwrap(amount);
(tokenIn, amount) = _handleUnwrap(tokenIn, amount);
}
out = LPETH.swap(tokenIn, amount, minOut);
payable(msg.sender).transfer(out);
}

function _handleUnwrap(
address tokenIn,
uint256 amount
)
internal
returns (address unwrappedToken, uint256 unwrappedAmount)
{
unwrappedAmount = Unwrap(tokenIn).unwrap(amount);
if (tokenIn == WRAPPED_STETH) {
unwrappedToken = STETH_TOKEN;
}
if (tokenIn == WRAPPED_EETH) {
unwrappedToken = EETH_TOKEN;
}
}
}

0 comments on commit 1ddd1de

Please sign in to comment.