Packages
kujira
0.1.76
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir interfaces to Kujira dApps, for building indexers, APIs and bots
Current section
Files
Jump to
Current section
Files
lib/kujira/fin.ex
defmodule Kujira.Fin do
@moduledoc """
Kujira's 100% on-chain, central limit order book style decentralized token exchange.
"""
alias Kujira.Fin.Order
alias Kujira.Contract
alias Kujira.Fin.Pair
alias Kujira.Fin.Book
@pair_code_ids Application.compile_env(:kujira, __MODULE__, pair_code_ids: [283, 352])
|> Keyword.get(:pair_code_ids)
@doc """
Fetches the Pair contract and its current config from the chain
"""
@spec get_pair(Channel.t(), String.t()) :: {:ok, Pair.t()} | {:error, :not_found}
def get_pair(channel, address), do: Contract.get(channel, {Pair, address})
@doc """
Fetches all Pairs
"""
@spec list_pairs(GRPC.Channel.t(), list(integer())) ::
{:ok, list(Pair.t())} | {:error, GRPC.RPCError.t()}
def list_pairs(channel, code_ids \\ @pair_code_ids) when is_list(code_ids),
do: Contract.list(channel, Pair, code_ids)
@doc """
Loads the current Book into the Pair
"""
@spec load_pair(Channel.t(), Pair.t(), integer()) ::
{:ok, Pair.t()} | {:error, GRPC.RPCError.t()}
def load_pair(channel, pair, limit \\ 100) do
with {:ok, res} <-
Contract.query_state_smart(channel, pair.address, %{book: %{limit: limit}}),
{:ok, book} <- Book.from_query(res) do
{:ok, %{pair | book: book}}
else
err ->
err
end
end
@doc """
Fetches all Orders for a pair
"""
@spec list_orders(GRPC.Channel.t(), Pair.t(), String.t()) ::
{:ok, list(Order.t())} | {:error, GRPC.RPCError.t()}
def list_orders(channel, pair, address) do
with {:ok, %{"orders" => orders}} <-
Contract.query_state_smart(channel, pair.address, %{
orders_by_user: %{address: address}
}) do
{:ok, Enum.map(orders, &Order.from_query(channel, pair, &1))}
else
err ->
err
end
end
end