feat: Implemented helper functions and missing constants

This commit is contained in:
domenicodev
2024-02-27 12:11:04 +01:00
parent d4e9e213ae
commit 61d4c4eb9f

View File

@@ -8,14 +8,19 @@ import {IERC20, ISwapAdapter} from "src/interfaces/ISwapAdapter.sol";
/// @dev This contract supports the following swaps: eETH<->ETH, wETH<->eETH, wETH<->ETH /// @dev This contract supports the following swaps: eETH<->ETH, wETH<->eETH, wETH<->ETH
contract EtherfiAdapter is ISwapAdapter { contract EtherfiAdapter is ISwapAdapter {
uint16 mintFee; // fee = 0.001 ETH * 'mintFee'
uint16 burnFee; // fee = 0.001 ETH * 'burnFee'
IWeEth wEeth; IWeEth wEeth;
IeEth eEth; IeEth eEth;
ILiquidityPool liquidityPool; ILiquidityPool liquidityPool;
IMembershipManager membershipManager;
constructor(address _wEeth) { constructor(address _wEeth) {
wEeth = IWeEth(_wEeth); wEeth = IWeEth(_wEeth);
eEth = wEeth.eETH(); eEth = wEeth.eETH();
liquidityPool = eEth.liquidityPool(); liquidityPool = eEth.liquidityPool();
membershipManager = liquidityPool.membershipManager();
} }
/// @dev Check if tokens in input are supported by this adapter /// @dev Check if tokens in input are supported by this adapter
@@ -32,6 +37,9 @@ contract EtherfiAdapter is ISwapAdapter {
_; _;
} }
/// @dev enable receive as this contract supports ETH
receive() external payable {}
function price( function price(
bytes32 _poolId, bytes32 _poolId,
IERC20 _sellToken, IERC20 _sellToken,
@@ -51,11 +59,42 @@ contract EtherfiAdapter is ISwapAdapter {
revert NotImplemented("TemplateSwapAdapter.swap"); revert NotImplemented("TemplateSwapAdapter.swap");
} }
function getLimits(bytes32 poolId, IERC20 sellToken, IERC20 buyToken) function getLimits(bytes32, IERC20 sellToken, IERC20 buyToken)
external external
view
override
checkInputTokens(address(sellToken), address(buyToken))
returns (uint256[] memory limits) returns (uint256[] memory limits)
{ {
revert NotImplemented("TemplateSwapAdapter.getLimits"); address sellTokenAddress = address(sellToken);
address buyTokenAddress = address(buyToken);
limits = new uint256[](2);
if(sellTokenAddress == address(0)) {
if(buyTokenAddress == address(eEth)) {
}
else { // ETH-weETH
}
}
else if(sellTokenAddress == address(wEeth)) {
if(buyTokenAddress == address(0)) {
}
else { // wEeth-ETH
}
}
else if(sellTokenAddress == address(eEth)) {
if(buyTokenAddress == address(0)) {
}
else { // eEth-wEeth
}
}
} }
function getCapabilities(bytes32 poolId, IERC20 sellToken, IERC20 buyToken) function getCapabilities(bytes32 poolId, IERC20 sellToken, IERC20 buyToken)
@@ -86,6 +125,25 @@ contract EtherfiAdapter is ISwapAdapter {
ids[] = new bytes32[](1); ids[] = new bytes32[](1);
ids[0] = bytes20(address(liquidityPool)); ids[0] = bytes20(address(liquidityPool));
} }
/// @notice Swap ETH for eETH using MembershipManager
/// @param payedAmount result of getETHRequiredToMintEeth(), the amount of ETH to pay(incl. fee)
/// @param receivedAmount eETH received
function swapEthForEeth(uint256 payedAmount, uint256 receivedAmount) internal {
return membershipManager.wrapEth(_amount, 0);
}
/// @notice Get ETH required to mint `_amount` eETH
function getETHRequiredToMintEeth(uint256 _amount) internal returns (uint256) {
uint256 feeAmount = uint256(mintFee) * 0.001 ether;
return _amount + feeAmount;
}
}
interface IMembershipManager {
function wrapEth(uint256 _amount, uint256 _amountForPoints) external payable returns (uint256);
} }
interface ILiquidityPool { interface ILiquidityPool {
@@ -103,6 +161,8 @@ interface ILiquidityPool {
function deposit(address _referral) external payable returns (uint256); function deposit(address _referral) external payable returns (uint256);
function deposit(address _user, address _referral) external payable returns (uint256); function deposit(address _user, address _referral) external payable returns (uint256);
function membershipManager() external view returns (IMembershipManager);
} }
interface IeEth { interface IeEth {