Current section

8 Versions

Jump to

Compare versions

12 files changed
+233 additions
-232 deletions
  @@ -74,8 +74,8 @@ Cache lives on the resource module that defines `defmemo`. Invalidate the module
74 74 ```elixir
75 75 Memoize.invalidate(Rujira.Fin.Pair, :list, [])
76 76 Memoize.invalidate(Rujira.Fin.Pair, :find_by_denoms, ["rune", "tcy"])
77 - Memoize.invalidate(Rujira.Fin.Book, :query, ["thor1pair", 100])
78 - Memoize.invalidate(Rujira.Fin.Order, :query_list, ["thor1pair", "thor1user", 30])
77 + Memoize.invalidate(Rujira.Fin.Book, :query, ["thor1pair"])
78 + Memoize.invalidate(Rujira.Fin.Order, :query_orders, ["thor1pair", "thor1user"])
79 79 ```
80 80
81 81 The facade uses `defdelegate` — it does not cache.
  @@ -117,7 +117,7 @@ defstruct [:id, :items, :total, :price, :book]
117 117
118 118 ## Visibility
119 119
120 - Every public function on a resource module must be delegated from the facade (`defdelegate` in `Rujira.Protocol`), or be a deployment protocol callback (`init_msg`, `migrate_msg`, `init_label`), or be a `new` constructor. Everything else must be `defp`.
120 + Every public function on a resource module must be delegated from the facade (`defdelegate` in `Rujira.Protocol`) or be a `new` constructor. Everything else must be `defp`.
121 121
122 122 ## Error Atoms
  @@ -1,7 +1,7 @@
1 1 {<<"links">>,
2 2 [{<<"GitHub">>,<<"https://github.com/RujiraNetwork/rujira_ex">>}]}.
3 3 {<<"name">>,<<"rujira_ex">>}.
4 - {<<"version">>,<<"0.0.3">>}.
4 + {<<"version">>,<<"0.0.4">>}.
5 5 {<<"description">>,<<"Domain library for Rujira">>}.
6 6 {<<"elixir">>,<<"~> 1.18">>}.
7 7 {<<"files">>,
  @@ -16,7 +16,7 @@ defmodule Rujira.Fin do
16 16 defdelegate get_pair(address), to: Pair, as: :get
17 17 defdelegate list_pairs(), to: Pair, as: :list
18 18 defdelegate get_stable_pair(denom), to: Pair, as: :find_stable
19 - defdelegate denom_for_symbol(symbol), to: Pair
19 + defdelegate denom_for_ticker(ticker), to: Pair
20 20 defdelegate get_pair_from_denoms(base, quote_denom), to: Pair, as: :find_by_denoms
21 21 defdelegate pair_from_id(id), to: Pair, as: :from_id
22 22 defdelegate ticker_id!(pair), to: Pair
  @@ -32,14 +32,14 @@ defmodule Rujira.Fin do
32 32 # --- Order ---
33 33
34 34 defdelegate list_orders(pair, address, limit \\ 30), to: Order, as: :list
35 - defdelegate list_pair_orders(pair, opts), to: Order, as: :list_all
35 + def list_pair_orders(pair, _opts \\ []), do: Order.list(pair)
36 36 defdelegate load_order(pair, side, price, owner), to: Order, as: :load
37 37 defdelegate list_all_orders(address), to: Order, as: :list_all_pairs
38 38 defdelegate order_from_id(id), to: Order, as: :from_id
39 39
40 40 # --- Range ---
41 41
42 - defdelegate list_ranges(pair, address \\ nil, opts \\ []), to: Range, as: :list
42 + def list_ranges(pair, address \\ nil, _opts \\ []), do: Range.list(pair, address)
43 43 defdelegate load_range(pair, idx), to: Range, as: :load
44 44 defdelegate list_all_ranges(address \\ nil, contracts \\ nil), to: Range, as: :list_all
45 45 defdelegate range_from_id(id), to: Range, as: :from_id
  @@ -12,6 +12,8 @@ defmodule Rujira.Fin.Book do
12 12
13 13 use Memoize
14 14
15 + @max_limit 255
16 +
15 17 defmodule Price do
16 18 @moduledoc """
17 19 Represents a price level in the order book with associated order details.
  @@ -96,9 +98,9 @@ defmodule Rujira.Fin.Book do
96 98 def load(pair, limit \\ 75)
97 99
98 100 def load(pair, limit) do
99 - with {:ok, res} <- query(pair.address, limit),
101 + with {:ok, res} <- query(pair.address),
100 102 {:ok, book} <- new(pair.address, res) do
101 - {:ok, %{pair | book: book}}
103 + {:ok, %{pair | book: take(book, limit)}}
102 104 else
103 105 {:error, err} ->
104 106 Logger.error(__MODULE__, "load #{pair.address} #{inspect(err)}")
  @@ -109,7 +111,7 @@ defmodule Rujira.Fin.Book do
109 111 @spec from_id(String.t()) :: {:ok, t()} | {:error, term()}
110 112 def from_id(id) do
111 113 with {:ok, res} <- Pair.get(id),
112 - {:ok, %{book: book}} <- load(res, 100) do
114 + {:ok, %{book: book}} <- load(res, @max_limit) do
113 115 {:ok, book}
114 116 end
115 117 end
  @@ -161,7 +163,12 @@ defmodule Rujira.Fin.Book do
161 163
162 164 # --- Private ---
163 165
164 - defmemo query(contract, limit \\ 100) do
165 - Contracts.query_state_smart_with_retry(contract, %{book: %{limit: limit}})
166 + @spec take(t(), non_neg_integer()) :: t()
167 + defp take(%__MODULE__{bids: bids, asks: asks} = book, limit) do
168 + %{book | bids: Enum.take(bids, limit), asks: Enum.take(asks, limit)}
169 + end
170 +
171 + defmemo query(contract) do
172 + Contracts.query_state_smart_with_retry(contract, %{book: %{limit: @max_limit}})
166 173 end
167 174 end
Loading more files…