Merge pull request #2696 from poanetwork/ab-fix-address-current-coin-balance

do not update fetched_coin_balance with nil
pull/2707/head
Victor Baranov 5 years ago committed by GitHub
commit d1d5a16dd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 6
      apps/explorer/lib/explorer/chain/import/runner/addresses.ex
  3. 69
      apps/explorer/test/explorer/chain/import/runner/addresses_test.exs
  4. 3
      apps/explorer/test/explorer/chain/import/runner/blocks_test.exs

@ -10,6 +10,7 @@
### Fixes
- [#2701](https://github.com/poanetwork/blockscout/pull/2701) - Exclude nonconsensus blocks from avg block time calculation by default
- [#2696](https://github.com/poanetwork/blockscout/pull/2696) - do not update fetched_coin_balance with nil
- [#2693](https://github.com/poanetwork/blockscout/pull/2693) - remove non consensus internal transactions
- [#2687](https://github.com/poanetwork/blockscout/pull/2687) - remove non-consensus token transfers, logs when inserting new consensus blocks
- [#2684](https://github.com/poanetwork/blockscout/pull/2684) - do not filter pending logs

@ -104,13 +104,15 @@ defmodule Explorer.Chain.Import.Runner.Addresses do
fetched_coin_balance:
fragment(
"""
CASE WHEN EXCLUDED.fetched_coin_balance_block_number IS NOT NULL AND
(? IS NULL OR
CASE WHEN EXCLUDED.fetched_coin_balance_block_number IS NOT NULL
AND EXCLUDED.fetched_coin_balance IS NOT NULL AND
(? IS NULL OR ? IS NULL OR
EXCLUDED.fetched_coin_balance_block_number >= ?) THEN
EXCLUDED.fetched_coin_balance
ELSE ?
END
""",
address.fetched_coin_balance,
address.fetched_coin_balance_block_number,
address.fetched_coin_balance_block_number,
address.fetched_coin_balance

@ -0,0 +1,69 @@
defmodule Explorer.Chain.Import.Runner.AddressesTest do
use Explorer.DataCase
alias Ecto.Multi
alias Explorer.Chain.{Address, Wei}
alias Explorer.Chain.Import.Runner.Addresses
alias Explorer.Repo
describe "run/1" do
test "does not update fetched_coin_balance if original value is not nil but new value is nil" do
block_number = 5
original_address = insert(:address, fetched_coin_balance: 5, fetched_coin_balance_block_number: block_number)
new_params = %{
fetched_coin_balance: nil,
fetched_coin_balance_block_number: block_number,
hash: to_string(original_address.hash)
}
changeset = Address.balance_changeset(%Address{}, new_params)
wei = original_address.fetched_coin_balance
assert {:ok,
%{
addresses: [
%Address{
fetched_coin_balance: ^wei,
fetched_coin_balance_block_number: 5
}
]
}} = run([changeset.changes])
end
test "updates fetched_coin_balance if original value is nil and new value is not nil" do
block_number = 5
original_address = insert(:address, fetched_coin_balance: nil, fetched_coin_balance_block_number: block_number)
new_params = %{
fetched_coin_balance: 5,
fetched_coin_balance_block_number: block_number,
hash: to_string(original_address.hash)
}
changeset = Address.balance_changeset(%Address{}, new_params)
wei = %Wei{value: Decimal.new(new_params.fetched_coin_balance)}
assert {:ok,
%{
addresses: [
%Address{
fetched_coin_balance: ^wei,
fetched_coin_balance_block_number: 5
}
]
}} = run([changeset.changes])
end
end
defp run(changes) do
timestamp = DateTime.utc_now()
options = %{timestamps: %{inserted_at: timestamp, updated_at: timestamp}}
Multi.new()
|> Addresses.run(changes, options)
|> Repo.transaction()
end
end

@ -8,8 +8,7 @@ defmodule Explorer.Chain.Import.Runner.BlocksTest do
alias Ecto.Multi
alias Explorer.Chain.Import.Runner.{Blocks, Transactions}
alias Explorer.Chain.{Address, Block, InternalTransaction, Log, Transaction, TokenTransfer}
alias Explorer.Chain
alias Explorer.Repo
alias Explorer.{Chain, Repo}
describe "run/1" do
setup do

Loading…
Cancel
Save