Skip to content

Commit

Permalink
fix: remove circular rendering on Oracles.render_query/2 (#1383)
Browse files Browse the repository at this point in the history
  • Loading branch information
sborrazas committed Jun 8, 2023
1 parent 40494ce commit 021e988
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 15 deletions.
30 changes: 18 additions & 12 deletions lib/ae_mdw/oracles.ex
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ defmodule AeMdw.Oracles do
end
|> Collection.paginate(pagination)

queries = Enum.map(query_ids, &render_query(state, &1))
queries = Enum.map(query_ids, &render_query(state, &1, true))

{:ok,
{serialize_queries_cursor(prev_cursor), queries, serialize_queries_cursor(next_cursor)}}
Expand Down Expand Up @@ -167,22 +167,28 @@ defmodule AeMdw.Oracles do
{bin_cursor, is_reversed?}
end

defp render_query(state, {oracle_pk, query_id}) do
defp render_query(state, {oracle_pk, query_id}, include_response?) do
Model.oracle_query(txi_idx: txi_idx, response_txi_idx: response_txi_idx) =
State.fetch!(state, Model.OracleQuery, {oracle_pk, query_id})

{query_tx, :oracle_query_tx, tx_hash, tx_type, block_hash} =
DBUtil.read_node_tx_details(state, txi_idx)

%{
block_hash: Enc.encode(:micro_block_hash, block_hash),
source_tx_hash: Enc.encode(:tx_hash, tx_hash),
source_tx_type: Format.type_to_swagger_name(tx_type),
query_id: Enc.encode(:oracle_query_id, query_id),
response: response_txi_idx && render_response(state, response_txi_idx)
}
|> Map.merge(:aeo_query_tx.for_client(query_tx))
|> update_in(["query"], &Base.encode64(&1, padding: false))
query =
%{
block_hash: Enc.encode(:micro_block_hash, block_hash),
source_tx_hash: Enc.encode(:tx_hash, tx_hash),
source_tx_type: Format.type_to_swagger_name(tx_type),
query_id: Enc.encode(:oracle_query_id, query_id)
}
|> Map.merge(:aeo_query_tx.for_client(query_tx))
|> update_in(["query"], &Base.encode64(&1, padding: false))

if include_response? do
Map.put(query, :response, response_txi_idx && render_response(state, response_txi_idx))
else
query
end
end

defp render_response(state, {_height, txi_idx, _ref_txi_idx}),
Expand All @@ -200,7 +206,7 @@ defmodule AeMdw.Oracles do
source_tx_hash: Enc.encode(:tx_hash, tx_hash),
source_tx_type: Format.type_to_swagger_name(tx_type),
query_id: Enc.encode(:oracle_query_id, query_id),
query: render_query(state, {oracle_pk, query_id})
query: render_query(state, {oracle_pk, query_id}, false)
}
|> Map.merge(:aeo_response_tx.for_client(response_tx))
|> update_in(["response"], &Base.encode64(&1, padding: false))
Expand Down
18 changes: 15 additions & 3 deletions test/ae_mdw_web/controllers/oracle_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -508,17 +508,29 @@ defmodule AeMdwWeb.OracleControllerTest do
store
|> Store.put(
Model.OracleQuery,
Model.oracle_query(index: {oracle_pk, query_id1}, txi_idx: txi_idx1)
Model.oracle_query(
index: {oracle_pk, query_id1},
txi_idx: txi_idx1,
response_txi_idx: txi_idx4
)
)
|> Store.put(Model.Tx, Model.tx(index: 789, id: tx_hash1))
|> Store.put(
Model.OracleQuery,
Model.oracle_query(index: {oracle_pk, query_id2}, txi_idx: txi_idx2)
Model.oracle_query(
index: {oracle_pk, query_id2},
txi_idx: txi_idx2,
response_txi_idx: txi_idx5
)
)
|> Store.put(Model.Tx, Model.tx(index: 791, id: tx_hash2))
|> Store.put(
Model.OracleQuery,
Model.oracle_query(index: {oracle_pk, query_id3}, txi_idx: txi_idx3)
Model.oracle_query(
index: {oracle_pk, query_id3},
txi_idx: txi_idx3,
response_txi_idx: txi_idx6
)
)
|> Store.put(Model.Tx, Model.tx(index: 799, id: tx_hash3))
|> Store.put(Model.OracleQuery, Model.oracle_query(index: {oracle_pk2, query_id4}))
Expand Down

0 comments on commit 021e988

Please sign in to comment.