Merge pull request #2062 from poanetwork/remove-duplicate-token-transfers

fix: uniq by hash, instead of transaction
pull/2086/head
Victor Baranov 6 years ago committed by GitHub
commit 00c9cf015f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      CHANGELOG.md
  2. 2
      apps/explorer/lib/explorer/chain.ex
  3. 60
      apps/explorer/lib/explorer/chain/token_transfer.ex

@ -44,6 +44,8 @@
- [#2017](https://github.com/poanetwork/blockscout/pull/2017) - fix: fix to/from filters on tx list pages
- [#2008](https://github.com/poanetwork/blockscout/pull/2008) - add new function clause for xDai network beneficiaries
- [#2009](https://github.com/poanetwork/blockscout/pull/2009) - addresses page improvements
- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions
- [#2062](https://github.com/poanetwork/blockscout/pull/2062) - fix: uniq by hash, instead of transaction
- [#2052](https://github.com/poanetwork/blockscout/pull/2052) - allow bytes32 for name and symbol
- [#2047](https://github.com/poanetwork/blockscout/pull/2047) - fix: show creating internal transactions
- [#2014](https://github.com/poanetwork/blockscout/pull/2014) - fix: use better queries for listLogs endpoint

@ -267,7 +267,7 @@ defmodule Explorer.Chain do
queries
|> Stream.flat_map(&Repo.all/1)
|> Stream.uniq()
|> Stream.uniq_by(& &1.hash)
|> Stream.concat(rewards_list)
|> Enum.sort_by(fn item ->
case item do

@ -204,59 +204,17 @@ defmodule Explorer.Chain.TokenTransfer do
transaction_hashes_from_token_transfers_sql(address_bytes, paging_options)
end
defp transaction_hashes_from_token_transfers_sql(address_bytes, %PagingOptions{key: nil, page_size: page_size}) do
{:ok, %Postgrex.Result{rows: transaction_hashes_from_token_transfers}} =
Repo.query(
"""
SELECT transaction_hash
FROM
(
SELECT transaction_hash
FROM token_transfers
WHERE from_address_hash = $1
UNION
SELECT transaction_hash
FROM token_transfers
WHERE to_address_hash = $1
) as token_transfers_transaction_hashes
LIMIT $2
""",
[address_bytes, page_size]
)
List.flatten(transaction_hashes_from_token_transfers)
end
defp transaction_hashes_from_token_transfers_sql(address_bytes, %PagingOptions{
key: {block_number, _index},
page_size: page_size
}) do
{:ok, %Postgrex.Result{rows: transaction_hashes_from_token_transfers}} =
Repo.query(
"""
SELECT transaction_hash
FROM
(
SELECT transaction_hash
FROM token_transfers
WHERE from_address_hash = $1
AND block_number < $2
UNION
SELECT transaction_hash
FROM token_transfers
WHERE to_address_hash = $1
AND block_number < $2
) as token_transfers_transaction_hashes
LIMIT $3
""",
[address_bytes, block_number, page_size]
defp transaction_hashes_from_token_transfers_sql(address_bytes, %PagingOptions{page_size: page_size} = paging_options) do
query =
from(token_transfer in TokenTransfer,
where: token_transfer.to_address_hash == ^address_bytes or token_transfer.from_address_hash == ^address_bytes,
select: type(token_transfer.transaction_hash, :binary),
limit: ^page_size
)
List.flatten(transaction_hashes_from_token_transfers)
query
|> page_transaction_hashes_from_token_transfers(paging_options)
|> Repo.all()
end
defp page_transaction_hashes_from_token_transfers(query, %PagingOptions{key: nil}), do: query

Loading…
Cancel
Save