calculate staked ratio after insert pools

pull/1957/head
saneery 6 years ago
parent f48e2c7e7b
commit b9160f2175
  1. 16
      apps/explorer/lib/explorer/chain/import/runner/staking_pools.ex
  2. 18
      apps/explorer/test/explorer/chain/import/runner/staking_pools_test.exs

@ -62,7 +62,7 @@ defmodule Explorer.Chain.Import.Runner.StakingPools do
{:ok, _} =
Import.insert_changes_list(
repo,
changes_list,
stakes_ratio(changes_list),
conflict_target: {:unsafe_fragment, "(address_hash) where \"primary\" = true"},
on_conflict: on_conflict,
for: Address.Name,
@ -85,4 +85,18 @@ defmodule Explorer.Chain.Import.Runner.StakingPools do
]
)
end
# Calculates staked ratio for each pool
defp stakes_ratio(pools) do
active_pools = Enum.filter(pools, & &1.metadata[:is_active])
stakes_total = Enum.reduce(pools, 0, fn pool, acc ->
acc + pool.metadata[:staked_amount]
end)
Enum.map(active_pools, fn pool ->
staked_ratio = pool.metadata[:staked_amount] / stakes_total
put_in(pool, [:metadata, :staked_ratio], staked_ratio)
end)
end
end

@ -6,7 +6,8 @@ defmodule Explorer.Chain.Import.Runner.StakingPoolsTest do
describe "run/1" do
test "insert new pools list" do
pools = [
pools =
[pool1, pool2, pool3] = [
%{
address_hash: %Explorer.Chain.Hash{
byte_count: 20,
@ -23,7 +24,7 @@ defmodule Explorer.Chain.Import.Runner.StakingPoolsTest do
bytes: <<187, 202, 168, 212, 130, 137, 187, 31, 252, 249, 128, 141, 154, 164, 177, 210, 21, 5, 76, 120>>
},
retries_count: 1,
staked_amount: 0,
staked_amount: 25,
was_banned_count: 0,
was_validator_count: 1
},
@ -46,7 +47,7 @@ defmodule Explorer.Chain.Import.Runner.StakingPoolsTest do
bytes: <<117, 223, 66, 56, 58, 254, 107, 245, 25, 74, 168, 250, 14, 155, 61, 95, 158, 134, 148, 65>>
},
retries_count: 1,
staked_amount: 0,
staked_amount: 25,
was_banned_count: 0,
was_validator_count: 1
},
@ -80,6 +81,17 @@ defmodule Explorer.Chain.Import.Runner.StakingPoolsTest do
assert {:ok, %{insert_staking_pools: list}} = run_changes(pools)
assert Enum.count(list) == Enum.count(pools)
saved_list =
Explorer.Chain.Address.Name
|> Repo.all()
|> Enum.reduce(%{}, fn pool, acc ->
Map.put(acc, pool.address_hash, pool)
end)
assert saved_list[pool1.address_hash].metadata["staked_ratio"] == 0.5
assert saved_list[pool2.address_hash].metadata["staked_ratio"] == 0.5
assert saved_list[pool3.address_hash].metadata["staked_ratio"] == 0.0
end
end

Loading…
Cancel
Save