735546619e
Signed-off-by: T-Hax <>
71 lines
2.4 KiB
Solidity
71 lines
2.4 KiB
Solidity
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
pragma solidity >=0.7.5;
|
|
|
|
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
|
|
|
|
import '../interfaces/IPeripheryPayments.sol';
|
|
import '../interfaces/external/IWETH9.sol';
|
|
|
|
import '../libraries/TransferHelper.sol';
|
|
|
|
import './PeripheryImmutableState.sol';
|
|
|
|
abstract contract PeripheryPayments is IPeripheryPayments, PeripheryImmutableState {
|
|
receive() external payable {
|
|
require(msg.sender == WETH9, 'Not WETH9');
|
|
}
|
|
|
|
/// @inheritdoc IPeripheryPayments
|
|
function unwrapWETH9(uint256 amountMinimum, address recipient) external payable override {
|
|
uint256 balanceWETH9 = IWETH9(WETH9).balanceOf(address(this));
|
|
require(balanceWETH9 >= amountMinimum, 'Insufficient WETH9');
|
|
|
|
if (balanceWETH9 > 0) {
|
|
IWETH9(WETH9).withdraw(balanceWETH9);
|
|
TransferHelper.safeTransferETH(recipient, balanceWETH9);
|
|
}
|
|
}
|
|
|
|
/// @inheritdoc IPeripheryPayments
|
|
function sweepToken(
|
|
address token,
|
|
uint256 amountMinimum,
|
|
address recipient
|
|
) external payable override {
|
|
uint256 balanceToken = IERC20(token).balanceOf(address(this));
|
|
require(balanceToken >= amountMinimum, 'Insufficient token');
|
|
|
|
if (balanceToken > 0) {
|
|
TransferHelper.safeTransfer(token, recipient, balanceToken);
|
|
}
|
|
}
|
|
|
|
/// @inheritdoc IPeripheryPayments
|
|
function refundETH() external payable override {
|
|
if (address(this).balance > 0) TransferHelper.safeTransferETH(msg.sender, address(this).balance);
|
|
}
|
|
|
|
/// @param token The token to pay
|
|
/// @param payer The entity that must pay
|
|
/// @param recipient The entity that will receive payment
|
|
/// @param value The amount to pay
|
|
function pay(
|
|
address token,
|
|
address payer,
|
|
address recipient,
|
|
uint256 value
|
|
) internal {
|
|
if (token == WETH9 && address(this).balance >= value) {
|
|
// pay with WETH9
|
|
IWETH9(WETH9).deposit{value: value}(); // wrap only what is needed to pay
|
|
IWETH9(WETH9).transfer(recipient, value);
|
|
} else if (payer == address(this)) {
|
|
// pay with tokens already in the contract (for the exact input multihop case)
|
|
TransferHelper.safeTransfer(token, recipient, value);
|
|
} else {
|
|
// pull payment
|
|
TransferHelper.safeTransferFrom(token, payer, recipient, value);
|
|
}
|
|
}
|
|
}
|