Kujira.Ghost (kujira v0.1.47)

Kujira's lending platform.

It has a vault-market architecture, where multiple Market can draw down from a single Vault. A Market must be whitelisted, as the repayment is guaranteed by its own execution logic, e.g. being over-collateralised and having a connection to Orca to liquidate collateral when needed

Summary

Functions

Gets the total deposit value of an address in a Vault. Under the hood, this queries the addresses balance of the receipt token, and adjusts it by the deposit_ratio

Fetches the Market contract and its current config from the chain.

Fetches the Vault contract and its current config from the chain

Loads the current Status into the Market

Loads the Market into a format that Orca can consume for health reporting

Loads a Position by borrower address

Loads the current Status into the Vault

Creates a lazy stream for fetching all positions for a Market

Functions

Link to this function

get_deposit(channel, vault, borrower)

@spec get_deposit(GRPC.Channel.t(), Kujira.Ghost.Vault.t(), String.t()) ::
  {:ok, integer()} | {:error, GRPC.RPCError.t()}

Gets the total deposit value of an address in a Vault. Under the hood, this queries the addresses balance of the receipt token, and adjusts it by the deposit_ratio

Link to this function

get_market(channel, address)

@spec get_market(GRPC.Channel.t(), String.t()) ::
  {:ok, Kujira.Ghost.Market.t()} | {:error, :not_found}

Fetches the Market contract and its current config from the chain.

Link to this function

get_vault(channel, address)

@spec get_vault(GRPC.Channel.t(), String.t()) ::
  {:ok, Kujira.Ghost.Vault.t()} | {:error, :not_found}

Fetches the Vault contract and its current config from the chain

Link to this function

list_markets(channel, code_ids \\ [291])

@spec list_markets(GRPC.Channel.t(), [integer()]) ::
  {:ok, [Kujira.Ghost.Market.t()]} | {:error, GRPC.RPCError.t()}

Fetches all Markets

Link to this function

list_vaults(channel, code_ids \\ [316])

@spec list_vaults(GRPC.Channel.t(), [integer()]) ::
  {:ok, [Kujira.Ghost.Vault.t()]} | {:error, GRPC.RPCError.t()}

Fetches all Vaults

Link to this function

load_market(channel, market)

@spec load_market(GRPC.Channel.t(), Kujira.Ghost.Market.t()) ::
  {:ok, Kujira.Ghost.Market.t()} | {:error, GRPC.RPCError.t()}

Loads the current Status into the Market

Link to this function

load_orca_market(channel, market, precision \\ 3)

@spec load_orca_market(GRPC.Channel.t(), Kujira.Ghost.Market.t(), integer() | nil) ::
  {:ok, Kujira.Orca.Market.t()} | {:error, GRPC.RPCError.t()}

Loads the Market into a format that Orca can consume for health reporting

Link to this function

load_position(channel, market, borrower)

@spec load_position(GRPC.Channel.t(), Kujira.Ghost.Market.t(), String.t()) ::
  {:ok, Kujira.Ghost.Position.t()} | {:error, GRPC.RPCError.t()}

Loads a Position by borrower address

Link to this function

load_vault(channel, vault)

@spec load_vault(GRPC.Channel.t(), Kujira.Ghost.Vault.t()) ::
  {:ok, Kujira.Ghost.Vault.t()} | {:error, GRPC.RPCError.t()}

Loads the current Status into the Vault

Link to this function

load_vault_oracle_price(channel, vault)

Link to this function

stream_positions(channel, market, vault)

@spec stream_positions(
  GRPC.Channel.t(),
  Kujira.Ghost.Market.t(),
  Kujira.Ghost.Vault.t()
) :: %Stream{
  accs: term(),
  done: term(),
  enum: term(),
  funs: term()
}

Creates a lazy stream for fetching all positions for a Market