# ERC721Permit

Nonfungible tokens that support an approve via signature, i.e. permit

### Functions[​](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#functions) <a href="#functions" id="functions"></a>

#### \_getAndIncrementNonce[​](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#_getandincrementnonce) <a href="#getandincrementnonce" id="getandincrementnonce"></a>

```solidity
  function _getAndIncrementNonce(
    uint256 tokenId
  ) internal virtual returns (uint256)
```

Gets the current nonce for a token ID and then increments it, returning the original value

#### constructor[​](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#constructor) <a href="#constructor" id="constructor"></a>

```solidity
  function constructor(
    string memory name_,
    string memory symbol_,
    string memory version_
  ) internal
```

Computes the nameHash and versionHash

#### DOMAIN\_SEPARATOR[​](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#domain_separator) <a href="#domain_separator" id="domain_separator"></a>

```solidity
  function DOMAIN_SEPARATOR(
  ) public view override returns (bytes32)
```

The domain separator used in the permit signature

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#return-values)

| Type    | Description                                           |
| ------- | ----------------------------------------------------- |
| bytes32 | domain seperator used in encoding of permit signature |

#### permit[​](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#permit) <a href="#permit" id="permit"></a>

```solidity
  function permit(
    address spender,
    uint256 tokenId,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external
```

Approve of a specific token ID for spending by spender via signature

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/base/ERC721Permit#parameters)

| Name       | Type    | Description                                                                    |
| ---------- | ------- | ------------------------------------------------------------------------------ |
| `spender`  | address | The account that is being approved                                             |
| `tokenId`  | uint256 | The ID of the token that is being approved for spending                        |
| `deadline` | uint256 | The deadline timestamp by which the call must be mined for the approve to work |
| `v`        | uint8   | Must produce valid secp256k1 signature from the holder along with `r` and `s`  |
| `r`        | bytes32 | Must produce valid secp256k1 signature from the holder along with `v` and `s`  |
| `s`        | bytes32 | Must produce valid secp256k1 signature from the holder along with `r` and `v`  |
