Replace revert strings with custom errors (#4261)
Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Francisco <fg@frang.io>
This commit is contained in:
@ -24,6 +24,16 @@ abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces {
|
||||
bytes32 private constant _PERMIT_TYPEHASH =
|
||||
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
|
||||
|
||||
/**
|
||||
* @dev Permit deadline has expired.
|
||||
*/
|
||||
error ERC2612ExpiredSignature(uint256 deadline);
|
||||
|
||||
/**
|
||||
* @dev Mismatched signature.
|
||||
*/
|
||||
error ERC2612InvalidSigner(address signer, address owner);
|
||||
|
||||
/**
|
||||
* @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
|
||||
*
|
||||
@ -43,14 +53,18 @@ abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces {
|
||||
bytes32 r,
|
||||
bytes32 s
|
||||
) public virtual {
|
||||
require(block.timestamp <= deadline, "ERC20Permit: expired deadline");
|
||||
if (block.timestamp > deadline) {
|
||||
revert ERC2612ExpiredSignature(deadline);
|
||||
}
|
||||
|
||||
bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));
|
||||
|
||||
bytes32 hash = _hashTypedDataV4(structHash);
|
||||
|
||||
address signer = ECDSA.recover(hash, v, r, s);
|
||||
require(signer == owner, "ERC20Permit: invalid signature");
|
||||
if (signer != owner) {
|
||||
revert ERC2612InvalidSigner(signer, owner);
|
||||
}
|
||||
|
||||
_approve(owner, spender, value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user