tighten up permit

This commit is contained in:
Noah Zinsmeister
2020-01-22 14:06:06 -05:00
parent 0d35e31a89
commit 794c384702
2 changed files with 3 additions and 13 deletions

View File

@ -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");

View File

@ -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;
}