# Asset

## Overview

#### License: MIT

```solidity
library Asset
```

A library for handling different types of assets, including ERC20 tokens, ERC4626 tokens, and Uniswap V2 LP tokens.

## Enums info

### Type

```solidity
enum Type {
	 ERC20,
	 ERC4626,
	 LP
}
```

## Structs info

### Info

```solidity
struct Info {
	address addr;
	Asset.Type tokenType;
}
```

## Functions info

### \_unwrap

```solidity
function _unwrap(
    Asset.Info memory _tokenInfo,
    uint256 _tokenAmount
) internal returns (address[] memory assets, uint256[] memory assetAmounts)
```

Unwraps the specified amount of tokens based on their type.

Parameters:

| Name          | Type              | Description                                                  |
| ------------- | ----------------- | ------------------------------------------------------------ |
| \_tokenInfo   | struct Asset.Info | Information about the token, including its address and type. |
| \_tokenAmount | uint256           | The amount of tokens to unwrap.                              |

Return values:

| Name         | Type       | Description                          |
| ------------ | ---------- | ------------------------------------ |
| assets       | address\[] | The unwrapped assets' addresses.     |
| assetAmounts | uint256\[] | The amounts of the unwrapped assets. |

### \_wrap

```solidity
function _wrap(
    address[] memory _assets,
    uint256[] memory _assetAmounts,
    Asset.Info memory _tokenInfo
) internal returns (uint256 tokenAmount)
```

Wraps the specified amounts of assets into a token.

Parameters:

| Name           | Type              | Description                                                  |
| -------------- | ----------------- | ------------------------------------------------------------ |
| \_assets       | address\[]        | The addresses of the assets to wrap.                         |
| \_assetAmounts | uint256\[]        | The amounts of the assets to wrap.                           |
| \_tokenInfo    | struct Asset.Info | Information about the token, including its address and type. |

Return values:

| Name        | Type    | Description                      |
| ----------- | ------- | -------------------------------- |
| tokenAmount | uint256 | The amount of the wrapped token. |

### \_redeem

```solidity
function _redeem(
    Asset.Info memory _tokenInfo,
    address _receiver
) internal returns (address[] memory assets, uint256[] memory assetAmounts)
```

Redeems the redundant amount of tokens for the underlying assets.

Parameters:

| Name        | Type              | Description                                                  |
| ----------- | ----------------- | ------------------------------------------------------------ |
| \_tokenInfo | struct Asset.Info | Information about the token, including its address and type. |
| \_receiver  | address           | The address that will receive the redeemed assets.           |

Return values:

| Name         | Type       | Description                         |
| ------------ | ---------- | ----------------------------------- |
| assets       | address\[] | The redeemed assets' addresses.     |
| assetAmounts | uint256\[] | The amounts of the redeemed assets. |

### \_safeIncreaseAllowance

```solidity
function _safeIncreaseAllowance(
    address _spender,
    address _token,
    uint256 _tokenAmount
) internal
```

Safely increases the allowance of a spender for a given token.

Parameters:

| Name          | Type    | Description                              |
| ------------- | ------- | ---------------------------------------- |
| \_spender     | address | The address allowed to spend the tokens. |
| \_token       | address | The address of the token.                |
| \_tokenAmount | uint256 | The amount of tokens to allow.           |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fringe.fi/v2-smart-contract-documentation/util/asset.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
