# IERC20Minimal

Minimal ERC20 interface for Algebra

Contains a subset of the full ERC20 interface that is used in Algebra

## Events

### Transfer

`event Transfer(address from, address to, uint256 value)`

Event emitted when tokens are transferred from one address to another, either via \`#transfer\` or \`#transferFrom\`.

| Name  | Type    | Description                                                             |
| ----- | ------- | ----------------------------------------------------------------------- |
| from  | address | The account from which the tokens were sent, i.e. the balance decreased |
| to    | address | The account to which the tokens were sent, i.e. the balance increased   |
| value | uint256 | The amount of tokens that were transferred                              |

### Approval

`event Approval(address owner, address spender, uint256 value)`

Event emitted when the approval amount for the spender of a given owner's tokens changes.

| Name    | Type    | Description                                               |
| ------- | ------- | --------------------------------------------------------- |
| owner   | address | The account that approved spending of its tokens          |
| spender | address | The account for which the spending allowance was modified |
| value   | uint256 | The new allowance from the owner to the spender           |

## Functions

### balanceOf

`function balanceOf(address account) external view returns (uint256)` view external

Returns the balance of a token

| Name    | Type    | Description                                                                    |
| ------- | ------- | ------------------------------------------------------------------------------ |
| account | address | The account for which to look up the number of tokens it has, i.e. its balance |

**Returns:**

| Name | Type    | Description                              |
| ---- | ------- | ---------------------------------------- |
| \[0] | uint256 | The number of tokens held by the account |

### transfer

`function transfer(address recipient, uint256 amount) external returns (bool)` external

Transfers the amount of token from the \`msg.sender\` to the recipient

| Name      | Type    | Description                                                   |
| --------- | ------- | ------------------------------------------------------------- |
| recipient | address | The account that will receive the amount transferred          |
| amount    | uint256 | The number of tokens to send from the sender to the recipient |

**Returns:**

| Name | Type | Description                                                                |
| ---- | ---- | -------------------------------------------------------------------------- |
| \[0] | bool | Returns true for a successful transfer, false for an unsuccessful transfer |

### allowance

`function allowance(address owner, address spender) external view returns (uint256)` view external

Returns the current allowance given to a spender by an owner

| Name    | Type    | Description                      |
| ------- | ------- | -------------------------------- |
| owner   | address | The account of the token owner   |
| spender | address | The account of the token spender |

**Returns:**

| Name | Type    | Description                                               |
| ---- | ------- | --------------------------------------------------------- |
| \[0] | uint256 | The current allowance granted by \`owner\` to \`spender\` |

### approve

`function approve(address spender, uint256 amount) external returns (bool)` external

Sets the allowance of a spender from the \`msg.sender\` to the value \`amount\`

| Name    | Type    | Description                                                                    |
| ------- | ------- | ------------------------------------------------------------------------------ |
| spender | address | The account which will be allowed to spend a given amount of the owners tokens |
| amount  | uint256 | The amount of tokens allowed to be used by \`spender\`                         |

**Returns:**

| Name | Type | Description                                                    |
| ---- | ---- | -------------------------------------------------------------- |
| \[0] | bool | Returns true for a successful approval, false for unsuccessful |

### transferFrom

`function transferFrom(address sender, address recipient, uint256 amount) external returns (bool)` external

Transfers \`amount\` tokens from \`sender\` to \`recipient\` up to the allowance given to the \`msg.sender\`

| Name      | Type    | Description                                           |
| --------- | ------- | ----------------------------------------------------- |
| sender    | address | The account from which the transfer will be initiated |
| recipient | address | The recipient of the transfer                         |
| amount    | uint256 | The amount of the transfer                            |

**Returns:**

| Name | Type | Description                                                    |
| ---- | ---- | -------------------------------------------------------------- |
| \[0] | bool | Returns true for a successful transfer, false for unsuccessful |

### mintAndFreeze

`function mintAndFreeze(address _to, uint256 _amount, uint64 _until) external returns (bool)` external

*Developer note: Mint the specified amount of token to the specified address and freeze it until the specified date. Be careful, gas usage is not deterministic, and depends on how many freezes \_to address already has.*

| Name     | Type    | Description                            |
| -------- | ------- | -------------------------------------- |
| \_to     | address | Address to which token will be freeze. |
| \_amount | uint256 | Amount of token to mint and freeze.    |
| \_until  | uint64  | Release date, must be in future.       |

**Returns:**

| Name | Type | Description                                               |
| ---- | ---- | --------------------------------------------------------- |
| \[0] | bool | A boolean that indicates if the operation was successful. |

### releaseOnce

`function releaseOnce() external` external

*Developer note: release first available freezing tokens.*

### getFreezing

`function getFreezing(address _addr, uint256 _index) external view returns (uint64 _release, uint256 _balance)` view external

*Developer note: gets freezing end date and freezing balance for the freezing portion specified by index.*

| Name    | Type    | Description                                                    |
| ------- | ------- | -------------------------------------------------------------- |
| \_addr  | address | Address of freeze tokens owner.                                |
| \_index | uint256 | Freezing portion index. It ordered by release date descending. |

**Returns:**

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| \_release | uint64  |             |
| \_balance | uint256 |             |
