# Pair (ERC-20)

This documentation covers ERC-20 functionality for denominating pool tokens. For Uniswap-specific functionality, see [Pair](https://moonsdust.gitbook.io/rcpswap/protocol-overview/smart-contract/pair).

## Code <a href="#code" id="code"></a>

[`UniswapV2ERC20.sol`](https://github.com/MoonsDusts/v2-core/blob/master/contracts/RCPswapV2ERC20.sol)

## Events <a href="#events" id="events"></a>

### Approval <a href="#approval" id="approval"></a>

```
event Approval(address indexed owner, address indexed spender, uint value);Copy
```

Emitted each time an approval occurs via [approve](#approval) or [permit](#permit_typehash).

### Transfer <a href="#transfer" id="transfer"></a>

```
event Transfer(address indexed from, address indexed to, uint value);Copy
```

Emitted each time a transfer occurs via [transfer](#transfer), [transferFrom](#transferfrom), mint, or burn.

## Read-Only Functions <a href="#read-only-functions" id="read-only-functions"></a>

### name <a href="#name" id="name"></a>

```
function name() external pure returns (string memory);Copy
```

Returns `Uniswap V2` for all pairs.

### symbol <a href="#symbol" id="symbol"></a>

```
function symbol() external pure returns (string memory);Copy
```

Returns `UNI-V2` for all pairs.

### decimals <a href="#decimals" id="decimals"></a>

```
function decimals() external pure returns (uint8);Copy
```

Returns `18` for all pairs.

### totalSupply <a href="#totalsupply" id="totalsupply"></a>

```
function totalSupply() external view returns (uint);Copy
```

Returns the total amount of pool tokens for a pair.

### balanceOf <a href="#balanceof" id="balanceof"></a>

```
function balanceOf(address owner) external view returns (uint);Copy
```

Returns the amount of pool tokens owned by an address.

### allowance <a href="#allowance" id="allowance"></a>

```
function allowance(address owner, address spender) external view returns (uint);Copy
```

Returns the amount of liquidity tokens owned by an address that a spender is allowed to transfer via [transferFrom](#transferfrom).

### DOMAIN\_SEPARATOR <a href="#domain_separator" id="domain_separator"></a>

```
function DOMAIN_SEPARATOR() external view returns (bytes32);Copy
```

Returns a domain separator for use in [permit](#permit_typehash).

### PERMIT\_TYPEHASH <a href="#permit_typehash" id="permit_typehash"></a>

```
function PERMIT_TYPEHASH() external view returns (bytes32);Copy
```

Returns a typehash for use in [permit](#permit_typehash).

### nonces <a href="#nonces" id="nonces"></a>

```
function nonces(address owner) external view returns (uint);Copy
```

Returns the current nonce for an address for use in [permit](#permit_typehash).

## State-Changing Functions <a href="#state-changing-functions" id="state-changing-functions"></a>

### approve <a href="#approve" id="approve"></a>

```
function approve(address spender, uint value) external returns (bool);Copy
```

Lets `msg.sender` set their allowance for a spender.

* Emits [Approval](#approval).

### transfer <a href="#transfer-1" id="transfer-1"></a>

```
function transfer(address to, uint value) external returns (bool);Copy
```

Lets `msg.sender` send pool tokens to an address.

* Emits [Transfer](#transfer).

### transferFrom <a href="#transferfrom" id="transferfrom"></a>

```
function transferFrom(address from, address to, uint value) external returns (bool);Copy
```

Sends pool tokens from one address to another.

* Requires approval.
* Emits [Transfer](#transfer).

### permit <a href="#permit" id="permit"></a>

```
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;Copy
```

Sets the allowance for a spender where approval is granted via a signature.

* See [Using Permit](#permit_typehash).
* Emits [Approval](#approval).

## Interface <a href="#interface" id="interface"></a>

```
import '@uniswap/v2-core/contracts/interfaces/IUniswapV2ERC20.sol';Copy
```

```
pragma solidity >=0.5.0;interface IUniswapV2ERC20 {  event Approval(address indexed owner, address indexed spender, uint value);  event Transfer(address indexed from, address indexed to, uint value);  function name() external pure returns (string memory);  function symbol() external pure returns (string memory);  function decimals() external pure returns (uint8);  function totalSupply() external view returns (uint);  function balanceOf(address owner) external view returns (uint);  function allowance(address owner, address spender) external view returns (uint);  function approve(address spender, uint value) external returns (bool);  function transfer(address to, uint value) external returns (bool);  function transferFrom(address from, address to, uint value) external returns (bool);  function DOMAIN_SEPARATOR() external view returns (bytes32);  function PERMIT_TYPEHASH() external pure returns (bytes32);  function nonces(address owner) external view returns (uint);  function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;}Copy
```

## ABI <a href="#abi" id="abi"></a>

```
import IUniswapV2ERC20 from '@uniswap/v2-core/build/IUniswapV2ERC20.json'
```
