# position.gno

{% embed url="<https://github.com/gnoswap-labs/gnoswap/blob/main/contract/r/gnoswap/position/v1/position.gno>" %}

Adds or removes liquidity from pools. Includes minting and burning of positions.

## Mint

```go
func Mint(
	cur realm,
	token0 string,
	token1 string,
	fee uint32,
	tickLower int32,
	tickUpper int32,
	amount0Desired string,
	amount1Desired string,
	amount0Min string,
	amount1Min string,
	deadline int64,
	mintTo address,
	caller address,
	referrer string
) (uint64, string, string, string)
```

Mint adds liquidity to a pool. Internally calls the `mint` function of the pool contract.

#### Parameters

| Name             | Type    | Description                                             |
| ---------------- | ------- | ------------------------------------------------------- |
| `cur`            | realm   | Pass `cross` as argument.                               |
| `token0`         | string  | The path of the token0 of the desired pool.             |
| `token1`         | string  | The path of the token1 of the desired pool.             |
| `fee`            | uint32  | The fee tier of the pool.                               |
| `tickLower`      | int32   | The lower tick of the price range of the position.      |
| `tickUpper`      | int32   | The upper tick of the price range of the position.      |
| `amount0Desired` | string  | The maximum amount of token0 to add.                    |
| `amount1Desired` | string  | The maximum amount of token1 to add.                    |
| `amount0Min`     | string  | The minimum amount of token0 to add.                    |
| `amount1Min`     | string  | The minimum amount of token1 to add.                    |
| `deadline`       | int64   | The deadline at which the transaction will expire.      |
| `mintTo`         | address | The address to receive the minted position.             |
| `caller`         | address | The caller address from staker (for one-click staking). |
| `referrer`       | string  | The referrer address for reward tracking.               |

#### Return Values

| Name         | Type   | Description                                |
| ------------ | ------ | ------------------------------------------ |
| `positionId` | uint64 | The ID of the position that was minted.    |
| `liquidity`  | string | The amount of liquidity added to the pool. |
| `amount0`    | string | The amount of token0 added to the pool.    |
| `amount1`    | string | The amount of token1 added to the pool.    |

## IncreaseLiquidity

```go
func IncreaseLiquidity(
	cur realm,
	positionId uint64,
	amount0DesiredStr string,
	amount1DesiredStr string,
	amount0MinStr string,
	amount1MinStr string,
	deadline int64
) (uint64, string, string, string, string)
```

IncreaseLiquidity adds additional liquidity to an existing position. Calling this function on a closed position will reopen it.

#### Parameters

| Name                | Type   | Description                                                |
| ------------------- | ------ | ---------------------------------------------------------- |
| `cur`               | realm  | Pass `cross` as argument.                                  |
| `positionId`        | uint64 | The ID of the position NFT in which to increase liquidity. |
| `amount0DesiredStr` | string | The maximum amount of token0 to increase.                  |
| `amount1DesiredStr` | string | The maximum amount of token1 to increase.                  |
| `amount0MinStr`     | string | The minimum amount of token0 to increase.                  |
| `amount1MinStr`     | string | The minimum amount of token1 to increase.                  |
| `deadline`          | int64  | The deadline at which the transaction will expire.         |

#### Return Values

| Name         | Type   | Description                                              |
| ------------ | ------ | -------------------------------------------------------- |
| `positionId` | uint64 | The ID of the position that the liquidity was increased. |
| `liquidity`  | string | The amount of liquidity added to the position.           |
| `amount0`    | string | The amount of token0 added to the position.              |
| `amount1`    | string | The amount of token1 added to the position.              |
| `poolPath`   | string | The path of the pool from which the position exists.     |

## DecreaseLiquidity

```go
func DecreaseLiquidity(
	cur realm,
	positionId uint64,
	liquidityStr string,
	amount0MinStr string,
	amount1MinStr string,
	deadline int64,
	unwrapResult bool
) (uint64, string, string, string, string, string, string)
```

DecreaseLiquidity decreases liquidity of an existing position.

#### Parameters

| Name            | Type   | Description                                                                                |
| --------------- | ------ | ------------------------------------------------------------------------------------------ |
| `cur`           | realm  | Pass `cross` as argument.                                                                  |
| `positionId`    | uint64 | The ID of the position to decrease liquidity from.                                         |
| `liquidityStr`  | string | The amount of liquidity to decrease.                                                       |
| `amount0MinStr` | string | The minimum amount of token0 to decrease.                                                  |
| `amount1MinStr` | string | The minimum amount of token1 to decrease.                                                  |
| `deadline`      | int64  | The deadline at which the transaction will expire.                                         |
| `unwrapResult`  | bool   | Whether or not to receive tokens in native `ugnot` if either token0 or token1 is `wugnot`. |

#### Return Values

| Name         | Type   | Description                                              |
| ------------ | ------ | -------------------------------------------------------- |
| `positionId` | uint64 | The ID of the position that the liquidity was decreased. |
| `liquidity`  | string | The amount of liquidity decreased from the position.     |
| `fee0`       | string | The amount of token0 fees collected.                     |
| `fee1`       | string | The amount of token1 fees collected.                     |
| `amount0`    | string | The amount of token0 decreased from the position.        |
| `amount1`    | string | The amount of token1 decreased from the position.        |
| `poolPath`   | string | The path of the pool in which the position exists.       |

## CollectFee

```go
func CollectFee(
	cur realm,
	positionId uint64,
	unwrapResult bool
) (uint64, string, string, string, string, string)
```

CollectFee collects fee accrued to a position.

#### Parameters

| Name           | Type   | Description                                                          |
| -------------- | ------ | -------------------------------------------------------------------- |
| `cur`          | realm  | Pass `cross` as argument.                                            |
| `positionId`   | uint64 | The ID of the position.                                              |
| `unwrapResult` | bool   | (if position has wugnot fee) whether to receive fee in ugnot or not. |

#### Return Values

| Name         | Type   | Description                                          |
| ------------ | ------ | ---------------------------------------------------- |
| `positionId` | uint64 | The ID of the position.                              |
| `afterFee0`  | string | The amount of token0 that was collected.             |
| `afterFee1`  | string | The amount of token1 that was collected.             |
| `poolPath`   | string | The path of the pool from which the position exists. |
| `origFee0`   | string | The fee amount of token0 before taking protocol fee. |
| `origFee1`   | string | The fee amount of token1 before taking protocol fee. |

## SetPositionOperator

```go
func SetPositionOperator(
	cur realm,
	positionId uint64,
	operator address
)

```

SetPositionOperator sets an operator for a position.

#### Parameters

| Name         | Type    | Description               |
| ------------ | ------- | ------------------------- |
| `cur`        | realm   | Pass `cross` as argument. |
| `positionId` | uint64  | ID of the position        |
| `operator`   | address | address of the operator   |
