tighten up permit
This commit is contained in:
@ -74,19 +74,12 @@ contract UniswapV2ERC20 is IUniswapV2ERC20 {
|
||||
return true;
|
||||
}
|
||||
|
||||
function permit(
|
||||
address owner, address spender, uint value, uint nonce, uint deadline, uint8 v, bytes32 r, bytes32 s
|
||||
)
|
||||
external
|
||||
{
|
||||
require(nonce == nonces[owner]++, "UniswapV2ERC20: INVALID_NONCE");
|
||||
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
|
||||
require(deadline >= block.timestamp, "UniswapV2ERC20: EXPIRED");
|
||||
require(v == 27 || v == 28, "UniswapV2ERC20: INVALID_V");
|
||||
require(s <= 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0, "UniswapV2ERC20: INVALID_S");
|
||||
bytes32 digest = keccak256(abi.encodePacked(
|
||||
"\x19\x01",
|
||||
DOMAIN_SEPARATOR,
|
||||
keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonce, deadline))
|
||||
keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
|
||||
));
|
||||
address recoveredAddress = ecrecover(digest, v, r, s);
|
||||
require(recoveredAddress != address(0) && recoveredAddress == owner, "UniswapV2ERC20: INVALID_SIGNATURE");
|
||||
|
||||
@ -19,8 +19,5 @@ interface IUniswapV2ERC20 {
|
||||
function PERMIT_TYPEHASH() external pure returns (bytes32);
|
||||
function nonces(address owner) external view returns (uint);
|
||||
|
||||
function permit(
|
||||
address owner, address spender, uint value, uint nonce, uint expiration, uint8 v, bytes32 r, bytes32 s
|
||||
)
|
||||
external;
|
||||
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user