735546619e
Signed-off-by: T-Hax <>
77 lines
3.8 KiB
Solidity
77 lines
3.8 KiB
Solidity
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
pragma solidity >=0.7.5;
|
|
|
|
/// @title Self Permit
|
|
/// @notice Functionality to call permit on any EIP-2612-compliant token for use in the route
|
|
interface ISelfPermit {
|
|
/// @notice Permits this contract to spend a given token from `msg.sender`
|
|
/// @dev The `owner` is always msg.sender and the `spender` is always address(this).
|
|
/// @param token The address of the token spent
|
|
/// @param value The amount that can be spent of token
|
|
/// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp
|
|
/// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
|
|
/// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
|
|
/// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
|
|
function selfPermit(
|
|
address token,
|
|
uint256 value,
|
|
uint256 deadline,
|
|
uint8 v,
|
|
bytes32 r,
|
|
bytes32 s
|
|
) external payable;
|
|
|
|
/// @notice Permits this contract to spend a given token from `msg.sender`
|
|
/// @dev The `owner` is always msg.sender and the `spender` is always address(this).
|
|
/// Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit
|
|
/// @param token The address of the token spent
|
|
/// @param value The amount that can be spent of token
|
|
/// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp
|
|
/// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
|
|
/// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
|
|
/// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
|
|
function selfPermitIfNecessary(
|
|
address token,
|
|
uint256 value,
|
|
uint256 deadline,
|
|
uint8 v,
|
|
bytes32 r,
|
|
bytes32 s
|
|
) external payable;
|
|
|
|
/// @notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter
|
|
/// @dev The `owner` is always msg.sender and the `spender` is always address(this)
|
|
/// @param token The address of the token spent
|
|
/// @param nonce The current nonce of the owner
|
|
/// @param expiry The timestamp at which the permit is no longer valid
|
|
/// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
|
|
/// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
|
|
/// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
|
|
function selfPermitAllowed(
|
|
address token,
|
|
uint256 nonce,
|
|
uint256 expiry,
|
|
uint8 v,
|
|
bytes32 r,
|
|
bytes32 s
|
|
) external payable;
|
|
|
|
/// @notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter
|
|
/// @dev The `owner` is always msg.sender and the `spender` is always address(this)
|
|
/// Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed.
|
|
/// @param token The address of the token spent
|
|
/// @param nonce The current nonce of the owner
|
|
/// @param expiry The timestamp at which the permit is no longer valid
|
|
/// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
|
|
/// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
|
|
/// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
|
|
function selfPermitAllowedIfNecessary(
|
|
address token,
|
|
uint256 nonce,
|
|
uint256 expiry,
|
|
uint8 v,
|
|
bytes32 r,
|
|
bytes32 s
|
|
) external payable;
|
|
}
|