Skip to main content

ERC20Permit

Git Source

Inherits: ERC20, IERC20Permit, EIP712

Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the permit method, which can be used to change an account's ERC20 allowance (see IERC20-allowance) by presenting a message signed by the account. By not relying on [IERC20-approve](/main/contracts/docs/src/external/ClaimTransfer.sol/contract.ClaimTransfer#approve), the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. Available since v3.4.

State Variables

_nonces

mapping(address => Counters.Counter) private _nonces

_PERMIT_TYPEHASH

bytes32 private immutable _PERMIT_TYPEHASH =
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")

Functions

constructor

Initializes the {EIP712} domain separator using the name parameter, and setting version to "1". It's a good idea to use the same name that is defined as the ERC20 token name.

constructor(string memory name) EIP712(name, "1");

permit

See IERC20Permit-permit.

function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
public
virtual
override;

nonces

See IERC20Permit-nonces.

function nonces(address owner) public view virtual override returns (uint256);

DOMAIN_SEPARATOR

See IERC20Permit-DOMAIN_SEPARATOR.

function DOMAIN_SEPARATOR() external view override returns (bytes32);

_useNonce

"Consume a nonce": return the current value and increment. Available since v4.1.

function _useNonce(address owner) internal virtual returns (uint256 current);