Skip to content
This repository has been archived by the owner on Jul 2, 2024. It is now read-only.

Commit

Permalink
Re-add BrrETHDepositor
Browse files Browse the repository at this point in the history
  • Loading branch information
kphed committed Nov 13, 2023
1 parent e202949 commit 42d8bee
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions src/BrrETHDepositor.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "forge-std/Test.sol";
import {SafeTransferLib} from "solady/utils/SafeTransferLib.sol";
import {BrrETH} from "src/BrrETH.sol";
import {IWETH} from "src/interfaces/IWETH.sol";
import {IComet} from "src/interfaces/IComet.sol";

contract BrrETHDepositor {
using SafeTransferLib for address;

address private constant _WETH_ADDR =
0x4200000000000000000000000000000000000006;
address private constant _COMET_ADDR =
0x46e6b214b524310239732D51387075E0e70970bf;
IWETH private constant _WETH = IWETH(_WETH_ADDR);
IComet private constant _COMET = IComet(_COMET_ADDR);
BrrETH public immutable brrETH;

error InvalidAmount();
error InvalidAddress();

constructor(address _brrETH) {
brrETH = BrrETH(_brrETH);

_WETH_ADDR.safeApprove(_COMET_ADDR, type(uint256).max);
_COMET_ADDR.safeApprove(_brrETH, type(uint256).max);
}

/**
* @notice Deposit ETH for brrETH.
* @param to address Shares recipient.
*/
function deposit(address to) external payable returns (uint256, uint256) {
if (msg.value == 0) revert InvalidAmount();
if (to == address(0)) revert InvalidAddress();

_WETH.deposit{value: msg.value}();

return _supplyAndDeposit(msg.value, to);
}

/**
* @notice Deposit WETH for brrETH.
* @param amount uint256 WETH amount.
* @param to address Shares recipient.
*/
function deposit(
uint256 amount,
address to
) external returns (uint256, uint256) {
if (amount == 0) revert InvalidAmount();
if (to == address(0)) revert InvalidAddress();

_WETH_ADDR.safeTransferFrom(msg.sender, address(this), amount);

return _supplyAndDeposit(amount, to);
}

function _supplyAndDeposit(
uint256 amount,
address to
) private returns (uint256 assets, uint256 shares) {
_COMET.supply(_WETH_ADDR, amount);

assets = _COMET_ADDR.balanceOf(address(this));
shares = brrETH.deposit(assets, to);
}
}

0 comments on commit 42d8bee

Please sign in to comment.