From 48d4067f89dd942d6692dfdd5cdad764ffe52967 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:13:03 +0530 Subject: [PATCH] Added WETH connector --- contracts/mainnet/connectors/weth/events.sol | 6 ++ contracts/mainnet/connectors/weth/main.sol | 68 ++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 contracts/mainnet/connectors/weth/events.sol create mode 100644 contracts/mainnet/connectors/weth/main.sol diff --git a/contracts/mainnet/connectors/weth/events.sol b/contracts/mainnet/connectors/weth/events.sol new file mode 100644 index 00000000..f8ec366a --- /dev/null +++ b/contracts/mainnet/connectors/weth/events.sol @@ -0,0 +1,6 @@ +pragma solidity ^0.7.0; + +contract Events { + event LogDeposit(uint256 tokenAmt, uint256 getId, uint256 setId); + event LogWithdraw(uint256 tokenAmt, uint256 getId, uint256 setId); +} diff --git a/contracts/mainnet/connectors/weth/main.sol b/contracts/mainnet/connectors/weth/main.sol new file mode 100644 index 00000000..da0a3cb7 --- /dev/null +++ b/contracts/mainnet/connectors/weth/main.sol @@ -0,0 +1,68 @@ +pragma solidity ^0.7.0; + +/** + * @title Basic. + * @dev Deposit & Withdraw from DSA. + */ + +import { TokenInterface } from "../../common/interfaces.sol"; + +import { DSMath } from "../../common/math.sol"; +import { Basic } from "../../common/basic.sol"; +import { Events } from "./events.sol"; + +abstract contract Resolver is Events, DSMath, Basic { + + /** + * @dev Deposit ETH into WETH. + * @notice Wrap ETH into WETH + * @param amt The amount of ETH to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of ETH deposited. + */ + function deposit( + uint256 amt, + uint256 getId, + uint256 setId + ) public payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + TokenInterface tokenContract = TokenInterface(wethAddr); + _amt = _amt == uint(-1) ? tokenContract.balanceOf(msg.sender) : _amt; + tokenContract.deposit{value: _amt}(); + + setUint(setId, _amt); + + _eventName = "LogDeposit(uint256,uint256,uint256)"; + _eventParam = abi.encode(_amt, getId, setId); + } + + /** + * @dev Withdraw ETH from WETH from Smart Account + * @notice Unwrap ETH from WETH + * @param amt The amount of weth to withdraw. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of ETH withdrawn. + */ + function withdraw( + uint amt, + uint getId, + uint setId + ) public payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + _amt = _amt == uint(-1) ? address(this).balance : _amt; + TokenInterface tokenContract = TokenInterface(wethAddr); + tokenContract.approve(wethAddr, _amt); + tokenContract.withdraw(_amt); + + setUint(setId, _amt); + + _eventName = "LogWithdraw(uint256,uint256,uint256)"; + _eventParam = abi.encode(_amt, getId, setId); + } +} + +contract ConnectV2WETH is Resolver { + string constant public name = "WETH-v1"; +}