Managing Positions

A position is managed through two different structs.

The first is the FarmingPositionRequest struct, which is used to open a new position or to add liquidity to an existing position.

All other position management operations (position transfer, reward withdrawal, liquidity withdrawal, etc.) use the FarmingPositionstruct.

FarmingPositionRequest Struct

The FarmingPositionRequest struct is structured as follow:

struct FarmingPositionRequest {
    uint256 setupIndex; 
    uint256 amount0; 
    uint256 amount1; 
    address positionOwner;
}
  • setupIndex -> Index of the chosen farming setup

  • amount0 -> amount of the first token (token0)

  • amount1 -> amount of the second token (token1)

  • positionOwner -> the position owner address. 0x0000000000000000000000000000000000000000 is used to represent the msg.sender; otherwise, input the address of your choice. This means that by using the OpenPosition function, you can also open a position for another address.

FarmingPosition Struct

The FarmingPosition struct contains all of the data of the position of a farmer in a setup and is populated and modified through the position management functions. It is composed as follows:

struct FarmingPosition {
    address uniqueOwner; 
    uint256 setupIndex; 
    uint256 creationBlock; 
    uint128 liquidityPoolTokenAmount; 
    uint256 reward;
}
  • uniqueOwner -> address representing the position owner address

  • setupIndex -> Index of the chosen farming setup for the position

  • creationBlock -> the block at which the position is created

  • liquidityPoolTokenAmount -> amount of liquidity in the position. When the amounts of token0 and token1 are added, the corresponding amount of "liquidity" is calculated according to the logic of Uniswap v3. See here for more information.

  • reward -> rewards for the position. initially unpopulated, and subsequently repopulated as rewards are recalculated on a block-to-block basis.

Last updated