Kujira.Ghost (kujira v0.1.80)

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 all positions via query_state_all, inheriting the same memoization

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, borrower)

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_deposit(channel, vault, borrower)

@spec get_deposit(GRPC.Channel.t(), Kujira.Ghost.Vault.t(), String.t()) ::
  {:ok, integer()} | {:error, GRPC.RPCError.t()}
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_positions(channel, market, vault)

Loads all positions via query_state_all, inheriting the same memoization

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

Link to this function

token_meta(t1, t2)