Skip to content

Commit 5bdcf70

Browse files
authored
chore: sort DEX swaps by creation instead of contract creation (#1882)
1 parent e53cee5 commit 5bdcf70

File tree

5 files changed

+54
-10
lines changed

5 files changed

+54
-10
lines changed

lib/ae_mdw/db/contract.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ defmodule AeMdw.Db.Contract do
462462
)
463463
|> State.put(
464464
Model.DexSwapTokens,
465-
Model.dex_swap_tokens(index: {create_txi, txi, idx})
465+
Model.dex_swap_tokens(index: {txi, idx, create_txi})
466466
)
467467

468468
false ->

lib/ae_mdw/db/model.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@ defmodule AeMdw.Db.Model do
483483
defrecord :dex_contract_swap_tokens, @dex_contract_swap_tokens_defaults
484484

485485
# DEX swap tokens indexed by contract:
486-
# index: {create_txi, txi, log_idx}
487-
@type dex_swap_tokens_index() :: {integer(), integer(), integer()}
486+
# index: {txi, log_idx, create_txi}
487+
@type dex_swap_tokens_index() :: {txi(), log_idx(), txi()}
488488
@type dex_swap_tokens ::
489489
record(:dex_swap_tokens,
490490
index: dex_swap_tokens_index()

lib/ae_mdw/dex.ex

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,13 @@ defmodule AeMdw.Dex do
120120
cursor =
121121
case cursor do
122122
nil -> nil
123-
{_account_pk, create_txi, txi, log_idx} -> {create_txi, txi, log_idx}
123+
{_account_pk, create_txi, txi, log_idx} -> {txi, log_idx, create_txi}
124124
end
125125

126126
state
127127
|> Collection.stream(@swaps_table, direction, nil, cursor)
128-
|> Stream.map(fn {create_txi, txi, log_idx} = index ->
128+
|> Stream.map(fn {txi, log_idx, create_txi} ->
129+
index = {create_txi, txi, log_idx}
129130
Model.contract_log(args: [from, _to]) = State.fetch!(state, Model.ContractLog, index)
130131

131132
{from, create_txi, txi, log_idx}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule AeMdw.Migrations.SortGeneralDexSwapsByCreation do
2+
@moduledoc """
3+
Reindex dex swaps by txi index of create_txi.
4+
"""
5+
6+
alias AeMdw.Collection
7+
alias AeMdw.Db.Model
8+
alias AeMdw.Db.State
9+
alias AeMdw.Db.DeleteKeysMutation
10+
alias AeMdw.Db.WriteMutation
11+
12+
require Model
13+
14+
@spec run(State.t(), boolean()) :: {:ok, non_neg_integer()}
15+
def run(state, _from_start?) do
16+
mutations_length =
17+
state
18+
|> Collection.stream(Model.DexSwapTokens, nil)
19+
|> Enum.map(fn {create_txi, txi, idx} = key ->
20+
{
21+
WriteMutation.new(
22+
Model.DexSwapTokens,
23+
Model.dex_swap_tokens(index: {txi, idx, create_txi})
24+
),
25+
key
26+
}
27+
end)
28+
|> Stream.chunk_every(1000)
29+
|> Stream.map(fn chunk ->
30+
{mutations, deletion_keys} = Enum.unzip(chunk)
31+
32+
mutations = [
33+
DeleteKeysMutation.new(%{Model.DexSwapTokens => deletion_keys}) | mutations
34+
]
35+
36+
_state = State.commit_db(state, mutations)
37+
length(mutations)
38+
end)
39+
|> Enum.sum()
40+
41+
{:ok, mutations_length}
42+
end
43+
end

test/ae_mdw_web/controllers/dex_controller_test.exs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ defmodule AeMdwWeb.DexControllerTest do
9090
)
9191
|> Store.put(
9292
Model.DexSwapTokens,
93-
Model.dex_swap_tokens(index: {pair_txi, txi, log_idx})
93+
Model.dex_swap_tokens(index: {txi, log_idx, pair_txi})
9494
)
9595
|> Store.put(
9696
Model.ContractLog,
@@ -279,7 +279,7 @@ defmodule AeMdwWeb.DexControllerTest do
279279
# CASE 1
280280
|> Store.put(
281281
Model.DexSwapTokens,
282-
Model.dex_swap_tokens(index: {pair_txi, txi1, log_idx})
282+
Model.dex_swap_tokens(index: {txi1, log_idx, pair_txi})
283283
)
284284
|> Store.put(
285285
Model.DexAccountSwapTokens,
@@ -307,7 +307,7 @@ defmodule AeMdwWeb.DexControllerTest do
307307
# CASE 2
308308
|> Store.put(
309309
Model.DexSwapTokens,
310-
Model.dex_swap_tokens(index: {pair_txi, txi2, log_idx})
310+
Model.dex_swap_tokens(index: {txi2, log_idx, pair_txi})
311311
)
312312
|> Store.put(
313313
Model.ContractLog,
@@ -336,7 +336,7 @@ defmodule AeMdwWeb.DexControllerTest do
336336
# CASE 3
337337
|> Store.put(
338338
Model.DexSwapTokens,
339-
Model.dex_swap_tokens(index: {pair_txi, txi3, log_idx})
339+
Model.dex_swap_tokens(index: {txi3, log_idx, pair_txi})
340340
)
341341
|> Store.put(
342342
Model.ContractLog,
@@ -374,7 +374,7 @@ defmodule AeMdwWeb.DexControllerTest do
374374
# CASE 4
375375
|> Store.put(
376376
Model.DexSwapTokens,
377-
Model.dex_swap_tokens(index: {pair_txi, txi4, log_idx})
377+
Model.dex_swap_tokens(index: {txi4, log_idx, pair_txi})
378378
)
379379
|> Store.put(
380380
Model.ContractLog,

0 commit comments

Comments
 (0)