Kujira.Ghost.Position (kujira v0.1.80)

An item representing the collateral deposit vs debt position of a particular address for a particular market

Fields

  • :market - The market where the position is held

  • :holder - The address that owns the position

  • :collateral_amount - The amount of collateral_token that has been deposited

  • :debt_shares - The amount of debt_token minted and owned by this position

  • :debt_amount - The resultant amount of debt owed, based on the debt_ratio

Summary

Types

The direction of the adjustment to the Position: collateral deposit, collateral withdrawal, debt borrow, debt repay

t()

Functions

Returns all adjustments to positions found in the tx response

Calculates a liquidation price for a given position. Quoted in terms of the underlying token decimals

Types

Link to this type

adjustment()

@type adjustment() :: :deposit | :withdrawal | :borrow | :repay

The direction of the adjustment to the Position: collateral deposit, collateral withdrawal, debt borrow, debt repay

TODO: Add :liquidation

@type t() :: %Kujira.Ghost.Position{
  collateral_amount: integer(),
  debt_amount: integer(),
  debt_shares: integer(),
  holder: String.t(),
  market: {Kujira.Ghost.Market, String.t()}
}

Functions

Link to this function

from_query(market, vault, arg3)

@spec from_query(Kujira.Ghost.Market.t(), Kujira.Ghost.Vault.t(), map()) ::
  :error | {:ok, t()}
Link to this function

from_tx_response(response)

@spec from_tx_response(Cosmos.Base.Abci.V1beta1.TxResponse.t()) ::
  [{{Kujira.Ghost.Market, String.t()}, String.t(), adjustment()}] | nil

Returns all adjustments to positions found in the tx response

Link to this function

liquidation_price(position, arg2, arg3)

@spec liquidation_price(Position.t(), Kujira.Ghost.Market.t(), Kujira.Ghost.Vault.t()) ::
  Decimal.t()

Calculates a liquidation price for a given position. Quoted in terms of the underlying token decimals

Token where decimals are similar - eg a loan of 1.2 USDC against 1 KUJI where max ltv is 0.6

iex> Kujira.Ghost.Position.liquidation_price( ...> %Kujira.Ghost.Position{debt_shares: 1_000_000, collateral_amount: 1_000_000}, ...> %Kujira.Ghost.Market{max_ltv: Decimal.from_float(0.6)}, ...> %Kujira.Ghost.Vault{status: %{debt_ratio: Decimal.from_float(1.2)}} ...>) Decimal.new(2)

And eg 1 wETH with 1000 USDC debt. Liq price should be 1666, which with a 12 dp decimal delta is 0.000000001666

iex> Kujira.Ghost.Position.liquidation_price( ...> %Kujira.Ghost.Position{debt_shares: 1_000_000_000, collateral_amount: 1_000_000_000_000_000_000}, ...> %Kujira.Ghost.Market{max_ltv: Decimal.from_float(0.6)}, ...> %Kujira.Ghost.Vault{status: %{debt_ratio: Decimal.from_float(1.0)}} ...>) Decimal.new("1.666666666666666666666666667E-9")