Packages
kujira
0.1.78
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/bow/pool/stable.ex
defmodule Kujira.Bow.Pool.Stable do
@moduledoc """
A instance of the BOW Stable Market Making strategy.
## Fields
* `:address` - The address of the contract
* `:owner` - The owner of the contract
* `:fin_pair` - The FIN Pair that this pool market-makes for
* `:token_lp` - The receipt token minted when deposits are made to the pool
* `:token_base` - The base token of the FIN Pair
* `:token_quote` - The quote token of the FIN Pair
* `:decimal_delta` - Base decimals - Quote decimals. Used to assert correct price_precision
* `:price_precision` - Maximum number of decimal places of the human price when submitting orders
"""
alias Kujira.Fin
alias Kujira.Token
alias Kujira.Bow.Status
defstruct [
:address,
:owner,
:fin_pair,
:token_lp,
:token_base,
:token_quote,
:decimal_delta,
:price_precision,
:strategy,
:status
]
@type t :: %__MODULE__{
address: String.t(),
owner: String.t(),
fin_pair: {Fin.Pair, String.t()},
token_lp: Token.t(),
token_base: Token.t(),
token_quote: Token.t(),
decimal_delta: integer(),
price_precision: integer(),
strategy: __MODULE__.Strategy.t(),
status: Status.t()
}
@spec from_config(GRPC.Channel.t(), String.t(), map()) ::
{:error, GRPC.RPCError.t()} | {:error, :invalid_config} | {:ok, __MODULE__.t()}
def from_config(channel, address, %{
"owner" => owner,
"denoms" => [
denom_base,
denom_quote
],
"price_precision" => %{
"decimal_places" => price_precision
},
"decimal_delta" => decimal_delta,
"fin_contract" => fin_pair,
"strategy" => strategy
}) do
with {:ok, token_base} <- Token.from_denom(channel, denom_base),
{:ok, token_quote} <- Token.from_denom(channel, denom_quote),
{:ok, token_lp} <- Token.from_denom(channel, "factory/#{address}/ulp"),
{:ok, strategy} <- __MODULE__.Strategy.from_config(strategy) do
{:ok,
%__MODULE__{
address: address,
owner: owner,
fin_pair: {Fin.Pair, fin_pair},
token_lp: token_lp,
token_base: token_base,
token_quote: token_quote,
decimal_delta: decimal_delta,
price_precision: price_precision,
strategy: strategy,
status: :not_loaded
}}
else
err ->
err
end
end
def from_config(_, _, _), do: {:error, :invalid_config}
end