diff --git a/apps/block_scout_web/assets/js/pages/stakes/become_candidate.js b/apps/block_scout_web/assets/js/pages/stakes/become_candidate.js index 89c1baa1e5..ea4ee78353 100644 --- a/apps/block_scout_web/assets/js/pages/stakes/become_candidate.js +++ b/apps/block_scout_web/assets/js/pages/stakes/become_candidate.js @@ -39,18 +39,13 @@ async function becomeCandidate ($modal, store, msg) { lockModal($modal) const stakingContract = store.getState().stakingContract - const blockRewardContract = store.getState().blockRewardContract const decimals = store.getState().tokenDecimals const stake = new BigNumber($modal.find('[candidate-stake]').val().replace(',', '.').trim()).shiftedBy(decimals).integerValue() const miningAddress = $modal.find('[mining-address]').val().trim().toLowerCase() try { if (!await stakingContract.methods.areStakeAndWithdrawAllowed().call()) { - if (await blockRewardContract.methods.isSnapshotting().call()) { - openErrorModal('Error', 'Staking actions are temporarily restricted. Please try again in a few blocks.') - } else { - openErrorModal('Error', 'The current staking epoch is ending, and staking actions are temporarily restricted. Please try again when the new epoch starts.') - } + openErrorModal('Error', 'The current staking epoch is ending, and staking actions are temporarily restricted. Please try again when the new epoch starts.') return false } diff --git a/apps/explorer/lib/explorer/staking/contract_reader.ex b/apps/explorer/lib/explorer/staking/contract_reader.ex index 35393dcc33..08a4c2e3fe 100644 --- a/apps/explorer/lib/explorer/staking/contract_reader.ex +++ b/apps/explorer/lib/explorer/staking/contract_reader.ex @@ -31,9 +31,7 @@ defmodule Explorer.Staking.ContractReader do inactive_delegators: {:staking, "poolDelegatorsInactive", [staking_address]}, staked_amount: {:staking, "stakeAmountTotal", [staking_address]}, self_staked_amount: {:staking, "stakeAmount", [staking_address, staking_address]}, - block_reward: {:block_reward, "validatorRewardPercent", [staking_address]}, - stakers: {:block_reward, "snapshotStakers", [staking_address]}, - reward_percents: {:block_reward, "snapshotRewardPercents", [staking_address]} + block_reward: {:block_reward, "validatorRewardPercent", [staking_address]} ] end @@ -59,14 +57,6 @@ defmodule Explorer.Staking.ContractReader do ] end - def pools_snapshot_requests(block_number) do - [staking_addresses: {:block_reward, "snapshotStakingAddresses", [], block_number}] - end - - def stakers_snapshot_requests(pool_address, block_number) do - [{pool_address, {:block_reward, "snapshotStakers", [pool_address], block_number}}] - end - def perform_requests(requests, contracts, abi) do requests |> generate_requests(contracts) diff --git a/apps/explorer/lib/explorer/staking/contract_state.ex b/apps/explorer/lib/explorer/staking/contract_state.ex index c1da32cdab..1671b9e657 100644 --- a/apps/explorer/lib/explorer/staking/contract_state.ex +++ b/apps/explorer/lib/explorer/staking/contract_state.ex @@ -11,7 +11,6 @@ defmodule Explorer.Staking.ContractState do alias Explorer.Chain.Events.{Publisher, Subscriber} alias Explorer.SmartContract.Reader alias Explorer.Staking.ContractReader - alias Explorer.Token.{BalanceReader, MetadataRetriever} @table_name __MODULE__ @table_keys [ @@ -158,11 +157,6 @@ defmodule Explorer.Staking.ContractState do Enum.map(responses.inactive_delegators, &{pool_address, &1, false}) end) - delegator_rewards = - Enum.into(pool_staking_responses, %{}, fn {pool_address, responses} -> - {pool_address, Enum.into(Enum.zip(responses.stakers, responses.reward_percents), %{})} - end) - delegator_responses = delegators |> Enum.map(fn {pool_address, delegator_address, _} -> @@ -219,27 +213,10 @@ defmodule Explorer.Staking.ContractState do delegator_entries = Enum.map(delegator_responses, fn {{pool_address, delegator_address, is_active}, response} -> - staking_response = pool_staking_responses[pool_address] - - reward_ratio = - if is_validator[staking_response.mining_address_hash] do - reward_ratio = delegator_rewards[pool_address][delegator_address] - - if reward_ratio do - reward_ratio / 10_000 - end - else - ratio( - response.stake_amount - response.ordered_withdraw, - staking_response.staked_amount - staking_response.self_staked_amount - ) * min(0.7, 1 - staking_response.block_reward / 1_000_000) - end - Map.merge(response, %{ delegator_address_hash: delegator_address, pool_address_hash: pool_address, - is_active: is_active, - reward_ratio: reward_ratio + is_active: is_active }) end) @@ -250,64 +227,11 @@ defmodule Explorer.Staking.ContractState do timeout: :infinity }) - if token && previous_epoch != global_responses.epoch_number do - update_tokens(token.contract_address_hash, contracts, abi, global_responses.epoch_start_block - 1, block_number) end Publisher.broadcast(:staking_update) end - defp update_tokens(token_contract_address_hash, contracts, abi, last_epoch_block_number, block_number) do - now = DateTime.utc_now() - - token_params = - token_contract_address_hash - |> MetadataRetriever.get_functions_of() - |> Map.merge(%{ - contract_address_hash: token_contract_address_hash, - type: "ERC-20" - }) - - addresses = - block_number - |> ContractReader.pools_snapshot_requests() - |> ContractReader.perform_requests(contracts, abi) - |> Map.fetch!(:staking_addresses) - |> Enum.flat_map(&ContractReader.stakers_snapshot_requests(&1, last_epoch_block_number)) - |> ContractReader.perform_requests(contracts, abi) - |> Map.values() - |> List.flatten() - |> Enum.uniq() - - balance_params = - addresses - |> Enum.map( - &%{ - token_contract_address_hash: token_contract_address_hash, - address_hash: &1, - block_number: block_number - } - ) - |> BalanceReader.get_balances_of() - |> Enum.zip(addresses) - |> Enum.map(fn {{:ok, balance}, address} -> - %{ - address_hash: address, - token_contract_address_hash: token_contract_address_hash, - block_number: block_number, - value: balance, - value_fetched_at: now - } - end) - - {:ok, _} = - Chain.import(%{ - addresses: %{params: Enum.map(addresses, &%{hash: &1}), on_conflict: :nothing}, - address_current_token_balances: %{params: balance_params}, - tokens: %{params: [token_params]} - }) - end - defp get_token(address) do with {:ok, address_hash} <- Chain.string_to_address_hash(address), {:ok, token} <- Chain.token_from_address_hash(address_hash) do diff --git a/apps/explorer/priv/contracts_abi/posdao/BlockRewardAuRa.json b/apps/explorer/priv/contracts_abi/posdao/BlockRewardAuRa.json index d56dd7fa8f..1b6076b8b8 100644 --- a/apps/explorer/priv/contracts_abi/posdao/BlockRewardAuRa.json +++ b/apps/explorer/priv/contracts_abi/posdao/BlockRewardAuRa.json @@ -139,20 +139,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [], - "name": "isSnapshotting", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [ @@ -223,20 +209,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [], - "name": "snapshotTotalStakeAmount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [ @@ -530,58 +502,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [ - { - "name": "_validatorStakingAddress", - "type": "address" - } - ], - "name": "snapshotRewardPercents", - "outputs": [ - { - "name": "result", - "type": "uint256[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_validatorStakingAddress", - "type": "address" - } - ], - "name": "snapshotStakers", - "outputs": [ - { - "name": "result", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "snapshotStakingAddresses", - "outputs": [ - { - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [