Setting the position

A position on mangrove is described by the minimum tick (tickIndex0, on the BASE/QUOTE list), the difference between two ticks (tickOffset), and the number of offers.

A fourth parameter is computed automatically thanks to the oracle. It is the offer at which we stop posting bids, and post asks instead (firstAskIndex).

Other parameters are characteristics of mangrove can be kept to their default value:

  • the gasprice (default: 0, defaults to mangrove gasprice)

  • the gasreq (default depends on the used Kandel Seeder)

  • the step size (defaults to 1)

Finally, we also have to choose a state for the funds to be in:

  • Active: funds are deposited on the kandel and offer are posted (if possible)

  • Passive: funds are deposited on the kandel with no offers

  • Vault: funds are not in the kandel

When funds are in the kandel contract, they are actually deposited in their sourcing strategy, thus can earn passive income from AAVE for example.

A position can be set via this function:

https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/MangroveVault.sol#L55-L60
struct KandelPosition {
  Tick tickIndex0;
  uint256 tickOffset;
  Params params;
  FundsState fundsState;
}
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/MangroveVault.sol#L782
  function setPosition(KandelPosition memory position) external onlyOwnerOrManager {

Or right after rebalancing in this function:

https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/MangroveVault.sol#L765-L772
  function swapAndSetPosition(
    address target,
    bytes calldata data,
    uint256 amountOut,
    uint256 amountInMin,
    bool sell,
    KandelPosition memory position
  ) external onlyOwnerOrManager nonReentrant returns (int256 netBaseChange, int256 netQuoteChange) {

Last updated