aave-protocol-v2/contracts/mocks/tokens/StaticATokenMetaTransactionMock.sol
2021-03-24 11:37:43 +01:00

50 lines
1.3 KiB
Solidity

// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
import {IAToken} from '../../interfaces/IAToken.sol';
import {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';
import {IStaticAToken} from '../../interfaces/IStaticAToken.sol';
contract StaticATokenMetaTransactionMock {
function permitAndDeposit(
IStaticAToken staticToken,
address recipient,
uint256 value,
uint16 referralCode,
bool fromUnderlying,
uint256 deadline,
IStaticAToken.SignatureParams calldata sigParamsPermit,
IStaticAToken.SignatureParams calldata sigParamsDeposit,
uint256 chainId
) external returns (uint256) {
// will throw if not permit underlying token
try
IERC20WithPermit(
fromUnderlying ? address(staticToken.ASSET()) : address(staticToken.ATOKEN())
)
.permit(
msg.sender,
address(staticToken),
value,
deadline,
sigParamsPermit.v,
sigParamsPermit.r,
sigParamsPermit.s
)
{} catch {
require(false, 'UNDERLYING_TOKEN_NO_PERMIT');
}
staticToken.metaDeposit(
msg.sender,
recipient,
value,
referralCode,
fromUnderlying,
deadline,
sigParamsDeposit,
chainId
);
}
}