Current section
8 Versions
Jump to
Current section
8 Versions
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…