diff --git a/CHANGELOG.md b/CHANGELOG.md index 36fae25f9..ab25634b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ changes. ### Fixed -- +- Fix calculating votes counting for governance actions ### Changed diff --git a/govtool/backend/sql/get-network-metrics.sql b/govtool/backend/sql/get-network-metrics.sql index 17404faa7..b482276a4 100644 --- a/govtool/backend/sql/get-network-metrics.sql +++ b/govtool/backend/sql/get-network-metrics.sql @@ -10,222 +10,215 @@ WITH DRepActivity AS ( epoch_no DESC LIMIT 1 ), -active_drep_boundary_epoch AS ( - SELECT - epoch_no - drep_activity AS epoch_no - FROM - DRepActivity -), -RankedDRep AS ( +DRepDistr AS ( SELECT - dh.raw AS drep_hash_raw, - b.epoch_no, - dr.deposit, - dr.voting_anchor_id, - ROW_NUMBER() OVER (PARTITION BY dh.raw ORDER BY dr.tx_id DESC) AS rank + drep_distr.*, + ROW_NUMBER() OVER (PARTITION BY drep_hash.id ORDER BY drep_distr.epoch_no DESC) AS rn FROM - drep_hash dh - JOIN - drep_registration dr ON dh.id = dr.drep_hash_id - JOIN - tx t ON dr.tx_id = t.id - JOIN - block b ON t.block_id = b.id - WHERE - dr.deposit >= 0 - GROUP BY - dh.raw, - b.epoch_no, - dr.voting_anchor_id, - dr.deposit, - dr.tx_id + drep_distr + JOIN drep_hash ON drep_hash.id = drep_distr.hash_id ), -current_epoch AS ( - SELECT - Max(NO) AS no - FROM - epoch +CurrentEpoch AS ( + SELECT MAX(no) AS no FROM epoch ), -current_block AS ( - SELECT - Max(block_no) AS block_no - FROM - block +ActiveDRepBoundaryEpoch AS ( + SELECT epoch_no - drep_activity AS epoch_no FROM DRepActivity ), -unique_delegators AS ( +LatestVotingProcedure AS ( SELECT - count(DISTINCT (addr_id)) AS count + vp.*, + ROW_NUMBER() OVER (PARTITION BY drep_voter ORDER BY tx_id DESC) AS rn FROM - delegation_vote + voting_procedure vp ), -total_delegations AS ( +LatestVoteEpoch AS ( SELECT - count(*) AS count + block.epoch_no, + lvp.drep_voter AS drep_id FROM - delegation_vote + LatestVotingProcedure lvp + JOIN tx ON tx.id = lvp.tx_id + JOIN block ON block.id = tx.block_id + WHERE + lvp.rn = 1 ), -total_gov_action_proposals AS ( +RankedDRepRegistration AS ( SELECT - count(DISTINCT (tx_id, INDEX)) AS count + dr.id, + dr.drep_hash_id, + dr.deposit, + dr.voting_anchor_id, + ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn, + encode(tx.hash, 'hex') AS tx_hash, + block.epoch_no FROM - gov_action_proposal + drep_registration dr + JOIN tx ON tx.id = dr.tx_id + JOIN block ON block.id = tx.block_id +), +TotalRegisteredDReps AS ( + SELECT COUNT(DISTINCT dh.raw) AS unique_registrations + FROM drep_registration dr + JOIN drep_hash dh ON dr.drep_hash_id = dh.id + WHERE dr.deposit > 0 +), +TotalActiveDReps AS ( + SELECT COUNT(DISTINCT RankedDRepRegistration.drep_hash_id) AS unique_active_drep_registrations + FROM RankedDRepRegistration + LEFT JOIN LatestVoteEpoch lve ON lve.drep_id = RankedDRepRegistration.drep_hash_id + WHERE + (RankedDRepRegistration.epoch_no >= (SELECT epoch_no FROM ActiveDRepBoundaryEpoch)) + OR (lve.epoch_no >= (SELECT epoch_no FROM ActiveDRepBoundaryEpoch)) ), -total_drep_votes AS ( +TotalInactiveDReps AS ( SELECT - count(*) AS count - FROM - voting_procedure - WHERE - voter_role = 'DRep' -), -total_stake_controlled_by_dreps AS ( + TotalRegisteredDReps.unique_registrations - TotalActiveDReps.unique_active_drep_registrations AS total_inactive_dreps + FROM TotalRegisteredDReps + CROSS JOIN TotalActiveDReps +), +TotalActiveCIP119CompliantDReps AS ( + SELECT COUNT(DISTINCT RankedDRepRegistration.drep_hash_id) AS unique_active_cip119_compliant_drep_registrations + FROM RankedDRepRegistration + JOIN voting_anchor va ON va.id = RankedDRepRegistration.voting_anchor_id + JOIN off_chain_vote_data ocvd ON ocvd.voting_anchor_id = va.id + JOIN off_chain_vote_drep_data ocvdd ON ocvdd.off_chain_vote_data_id = ocvd.id + WHERE ocvdd.given_name IS NOT NULL + AND (RankedDRepRegistration.epoch_no >= (SELECT epoch_no FROM ActiveDRepBoundaryEpoch) + OR (EXISTS ( + SELECT 1 FROM LatestVoteEpoch lve + WHERE lve.drep_id = RankedDRepRegistration.drep_hash_id + AND lve.epoch_no >= (SELECT epoch_no FROM ActiveDRepBoundaryEpoch) + ))) +), +TotalStakeControlledByActiveDReps AS ( SELECT - SUM(dd.amount)::bigint AS total + COALESCE(SUM(dd.amount), 0)::bigint AS total FROM - drep_distr dd + drep_hash dh + LEFT JOIN DRepDistr dd ON dd.hash_id = dh.id AND dd.rn = 1 + LEFT JOIN RankedDRepRegistration rd ON dd.hash_id = rd.drep_hash_id AND rd.rn = 1 + LEFT JOIN LatestVoteEpoch lve ON lve.drep_id = dh.id + CROSS JOIN DRepActivity WHERE - dd.epoch_no = (SELECT no FROM current_epoch) + dd.epoch_no = (SELECT no FROM CurrentEpoch) + AND COALESCE(rd.deposit, 0) >= 0 + AND ((DRepActivity.epoch_no - GREATEST(COALESCE(lve.epoch_no, 0), COALESCE(rd.epoch_no, 0))) <= DRepActivity.drep_activity) ), -total_stake_controlled_by_spos AS ( - SELECT - SUM(ps.stake)::bigint AS total - FROM - pool_stat ps - WHERE - ps.epoch_no = (SELECT no FROM current_epoch) +CurrentBlock AS ( + SELECT MAX(block_no) AS block_no FROM block ), -total_registered_direct_voters AS ( - SELECT - COUNT(DISTINCT dh.raw) AS unique_direct_voters - FROM - drep_registration dr - JOIN - drep_hash dh - ON - dr.drep_hash_id = dh.id - LEFT JOIN - voting_anchor va - ON - dr.voting_anchor_id = va.id - WHERE - dr.deposit > 0 - AND va.url IS NULL +UniqueDelegators AS ( + SELECT COUNT(DISTINCT addr_id) AS count FROM delegation_vote ), -total_registered_dreps AS ( - SELECT - count(DISTINCT dh.raw) AS unique_registrations - FROM - drep_registration dr - JOIN - drep_hash dh - ON - dr.drep_hash_id = dh.id - WHERE - dr.deposit > 0 +TotalDelegations AS ( + SELECT COUNT(*) AS count FROM delegation_vote +), +TotalGovActionProposals AS ( + SELECT COUNT(DISTINCT (tx_id, INDEX)) AS count FROM gov_action_proposal ), -total_active_dreps AS ( +TotalDRepVotes AS ( + SELECT COUNT(*) AS count FROM voting_procedure WHERE voter_role = 'DRep' +), +TotalStakeControlledBySPOs AS ( + SELECT SUM(ps.stake)::bigint AS total FROM pool_stat ps WHERE ps.epoch_no = (SELECT no FROM CurrentEpoch) +), +LatestExistingVotingAnchor AS ( SELECT - count(DISTINCT drep_hash_raw) AS unique_active_drep_registrations - FROM - RankedDRep + subquery.drep_registration_id, + subquery.drep_hash_id, + subquery.voting_anchor_id, + subquery.url, + subquery.metadata_hash, + subquery.ocvd_id + FROM ( + SELECT + dr.id AS drep_registration_id, + dr.drep_hash_id, + va.id AS voting_anchor_id, + va.url, + encode(va.data_hash, 'hex') AS metadata_hash, + ocvd.id AS ocvd_id, + ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn + FROM + drep_registration dr + JOIN voting_anchor va ON dr.voting_anchor_id = va.id + JOIN off_chain_vote_data ocvd ON va.id = ocvd.voting_anchor_id + WHERE + ocvd.voting_anchor_id IS NOT NULL + ) subquery WHERE - epoch_no >= (SELECT epoch_no FROM active_drep_boundary_epoch) - AND rank = 1 + subquery.rn = 1 ), -total_inactive_dreps AS ( +HasNonDeregisterVotingAnchor AS ( SELECT - total_registered_dreps.unique_registrations - total_active_dreps.unique_active_drep_registrations AS total_inactive_dreps + dr.drep_hash_id, + EXISTS ( + SELECT 1 + FROM drep_registration dr_sub + WHERE + dr_sub.drep_hash_id = dr.drep_hash_id + AND dr_sub.voting_anchor_id IS NULL + AND COALESCE(dr_sub.deposit, 0) >= 0 + ) AS value FROM - total_registered_dreps - CROSS JOIN - total_active_dreps + drep_registration dr + GROUP BY + dr.drep_hash_id ), -total_active_cip119_compliant_dreps AS ( - SELECT - count(DISTINCT drep_hash_raw) AS unique_active_cip119_compliant_drep_registrations - FROM - RankedDRep - JOIN - voting_anchor va on va.id = RankedDRep.voting_anchor_id - JOIN off_chain_vote_data ocvd on ocvd.voting_anchor_id = va.id - JOIN off_chain_vote_drep_data ocvdd on ocvdd.off_chain_vote_data_id = ocvd.id - WHERE - -- given_name is the only compulsory field in CIP-119 - ocvdd.given_name IS NOT NULL - AND - epoch_no >= (SELECT epoch_no FROM active_drep_boundary_epoch) - AND - rank = 1 -), -always_abstain_voting_power AS ( - SELECT - coalesce(( - SELECT - amount - FROM drep_hash +TotalRegisteredDirectVoters AS ( + SELECT COUNT(DISTINCT rdr.drep_hash_id) AS unique_direct_voters + FROM RankedDRepRegistration rdr + LEFT JOIN LatestExistingVotingAnchor leva ON leva.drep_hash_id = rdr.drep_hash_id + LEFT JOIN HasNonDeregisterVotingAnchor hndva ON hndva.drep_hash_id = rdr.drep_hash_id + WHERE rdr.rn = 1 AND COALESCE(rdr.deposit, 0) >= 0 AND (leva.url IS NULL OR hndva.value = true) +), +AlwaysAbstainVotingPower AS ( + SELECT COALESCE((SELECT amount FROM drep_hash LEFT JOIN drep_distr ON drep_hash.id = drep_distr.hash_id - WHERE - drep_hash.view = 'drep_always_abstain' ORDER BY epoch_no DESC LIMIT 1), 0) AS amount + WHERE drep_hash.view = 'drep_always_abstain' + ORDER BY epoch_no DESC LIMIT 1), 0) AS amount ), -always_no_confidence_voting_power AS ( - SELECT - coalesce(( - SELECT - amount - FROM drep_hash +AlwaysNoConfidenceVotingPower AS ( + SELECT COALESCE((SELECT amount FROM drep_hash LEFT JOIN drep_distr ON drep_hash.id = drep_distr.hash_id - WHERE - drep_hash.view = 'drep_always_no_confidence' ORDER BY epoch_no DESC LIMIT 1), 0) AS amount + WHERE drep_hash.view = 'drep_always_no_confidence' + ORDER BY epoch_no DESC LIMIT 1), 0) AS amount +), +TotalDRepDistr AS ( + SELECT SUM(COALESCE(amount, 0)) total_drep_distr FROM drep_distr where epoch_no = (SELECT no from CurrentEpoch) ) SELECT - current_epoch.no as epoch_no, - current_block.block_no, - unique_delegators.count as unique_delegators, - total_delegations.count as total_delegations, - total_gov_action_proposals.count as total_gov_action_proposals, - total_drep_votes.count as total_drep_votes, - total_registered_dreps.unique_registrations as total_registered_dreps, - COALESCE(total_stake_controlled_by_dreps.total, 0) as total_stake_controlled_by_dreps, - COALESCE(total_stake_controlled_by_spos.total, 0) as total_stake_controlled_by_spos, - total_active_dreps.unique_active_drep_registrations as total_active_dreps, - total_inactive_dreps.total_inactive_dreps as total_inactive_dreps, - total_active_cip119_compliant_dreps.unique_active_cip119_compliant_drep_registrations as total_active_cip119_compliant_dreps, - total_registered_direct_voters.unique_direct_voters as total_registered_direct_voters, - always_abstain_voting_power.amount as always_abstain_voting_power, - always_no_confidence_voting_power.amount as always_no_confidence_voting_power, - network_name -FROM - current_epoch - CROSS JOIN current_block - CROSS JOIN unique_delegators - CROSS JOIN total_delegations - CROSS JOIN total_gov_action_proposals - CROSS JOIN total_drep_votes - CROSS JOIN total_registered_dreps - CROSS JOIN total_stake_controlled_by_dreps - CROSS JOIN total_stake_controlled_by_spos - CROSS JOIN total_active_dreps - CROSS JOIN total_inactive_dreps - CROSS JOIN total_active_cip119_compliant_dreps - CROSS JOIN total_registered_direct_voters - CROSS JOIN always_abstain_voting_power - CROSS JOIN always_no_confidence_voting_power - CROSS JOIN meta -GROUP BY - current_epoch.no, - current_block.block_no, - unique_delegators.count, - total_delegations.count, - total_gov_action_proposals.count, - total_drep_votes.count, - total_registered_dreps.unique_registrations, - total_stake_controlled_by_dreps.total, - total_stake_controlled_by_spos.total, - total_active_dreps.unique_active_drep_registrations, - total_inactive_dreps.total_inactive_dreps, - total_active_cip119_compliant_dreps.unique_active_cip119_compliant_drep_registrations, - total_registered_direct_voters.unique_direct_voters, - always_abstain_voting_power.amount, - always_no_confidence_voting_power.amount, - network_name; - + CurrentEpoch.no AS epoch_no, + CurrentBlock.block_no, + UniqueDelegators.count AS unique_delegators, + TotalDelegations.count AS total_delegations, + TotalGovActionProposals.count AS total_gov_action_proposals, + TotalDRepVotes.count AS total_drep_votes, + TotalRegisteredDReps.unique_registrations AS total_registered_dreps, + TotalDRepDistr.total_drep_distr, + COALESCE(TotalStakeControlledByActiveDReps.total, 0) + COALESCE(AlwaysAbstainVotingPower.amount, 0) + COALESCE(AlwaysNoConfidenceVotingPower.amount, 0) AS total_stake_controlled_dreps, + COALESCE(TotalStakeControlledBySPOs.total, 0) AS total_stake_controlled_by_spos, + TotalActiveDReps.unique_active_drep_registrations AS total_active_dreps, + TotalInactiveDReps.total_inactive_dreps AS total_inactive_dreps, + TotalActiveCIP119CompliantDReps.unique_active_cip119_compliant_drep_registrations AS total_active_cip119_compliant_dreps, + TotalRegisteredDirectVoters.unique_direct_voters AS total_registered_direct_voters, + AlwaysAbstainVotingPower.amount AS always_abstain_voting_power, + AlwaysNoConfidenceVotingPower.amount AS always_no_confidence_voting_power, + meta.network_name +FROM CurrentEpoch +CROSS JOIN CurrentBlock +CROSS JOIN UniqueDelegators +CROSS JOIN TotalDRepDistr +CROSS JOIN TotalDelegations +CROSS JOIN TotalGovActionProposals +CROSS JOIN TotalDRepVotes +CROSS JOIN TotalRegisteredDReps +CROSS JOIN TotalStakeControlledByActiveDReps +CROSS JOIN TotalStakeControlledBySPOs +CROSS JOIN TotalActiveDReps +CROSS JOIN TotalInactiveDReps +CROSS JOIN TotalActiveCIP119CompliantDReps +CROSS JOIN TotalRegisteredDirectVoters +CROSS JOIN AlwaysAbstainVotingPower +CROSS JOIN AlwaysNoConfidenceVotingPower +CROSS JOIN meta; diff --git a/govtool/backend/sql/list-proposals.sql b/govtool/backend/sql/list-proposals.sql index ad66a5c7e..a0e8d2def 100644 --- a/govtool/backend/sql/list-proposals.sql +++ b/govtool/backend/sql/list-proposals.sql @@ -100,24 +100,38 @@ RankedPoolVotes AS ( voting_procedure vp ), PoolVotes AS ( - SELECT - rpv.gov_action_proposal_id, - ps.epoch_no, - COUNT(DISTINCT CASE WHEN vote = 'Yes' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes, - COUNT(DISTINCT CASE WHEN vote = 'No' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes, - COUNT(DISTINCT CASE WHEN vote = 'Abstain' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes, - SUM(CASE WHEN rpv.vote = 'Yes' THEN ps.voting_power ELSE 0 END) AS poolYesVotes, - SUM(CASE WHEN rpv.vote = 'No' THEN ps.voting_power ELSE 0 END) AS poolNoVotes, - SUM(CASE WHEN rpv.vote = 'Abstain' THEN ps.voting_power ELSE 0 END) AS poolAbstainVotes - FROM - RankedPoolVotes rpv - JOIN - pool_stat ps - ON rpv.pool_voter = ps.pool_hash_id - WHERE - rpv.rn = 1 AND ps.epoch_no = (SELECT MAX(no) FROM epoch) - GROUP BY - rpv.gov_action_proposal_id, ps.epoch_no + SELECT + rpv.gov_action_proposal_id, + ps.epoch_no, + COUNT(DISTINCT CASE WHEN vote = 'Yes' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes, + COUNT(DISTINCT CASE WHEN vote = 'No' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes, + COUNT(DISTINCT CASE WHEN vote = 'Abstain' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes, + SUM(CASE WHEN rpv.vote = 'Yes' THEN ps.voting_power ELSE 0 END) AS poolYesVotes, + SUM(CASE WHEN rpv.vote = 'No' THEN ps.voting_power ELSE 0 END) AS poolNoVotes, + SUM(CASE WHEN rpv.vote = 'Abstain' THEN ps.voting_power ELSE 0 END) AS poolAbstainVotes + FROM + RankedPoolVotes rpv + JOIN + pool_stat ps + ON rpv.pool_voter = ps.pool_hash_id + WHERE + rpv.rn = 1 AND ps.epoch_no = (SELECT MAX(no) FROM epoch) + GROUP BY + rpv.gov_action_proposal_id, ps.epoch_no +), +RankedDRepVotes AS ( + SELECT + *, + ROW_NUMBER() OVER (PARTITION BY vp.drep_voter ORDER BY vp.tx_id DESC) AS rn + FROM + voting_procedure vp +), +RankedDRepRegistration AS ( + SELECT + *, + ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn + FROM + drep_registration dr ), CommitteeVotes AS ( SELECT @@ -225,19 +239,19 @@ SELECT off_chain_vote_gov_action_data.abstract, off_chain_vote_gov_action_data.motivation, off_chain_vote_gov_action_data.rationale, - COALESCE(SUM(ldd_drep.amount) FILTER (WHERE voting_procedure.vote::text = 'Yes'), 0) yes_votes, - COALESCE(SUM(ldd_drep.amount) FILTER (WHERE voting_procedure.vote::text = 'No'), 0) + ( - CASE WHEN gov_action_proposal.type = 'NoConfidence' OR gov_action_proposal.type = 'HardForkInitiation' THEN + COALESCE(SUM(ldd_drep.amount) FILTER (WHERE rdv.vote::text = 'Yes'), 0) + ( + CASE WHEN gov_action_proposal.type = 'NoConfidence' THEN + drep_voting_power.no_confidence + ELSE + 0 + END) yes_votes, + COALESCE(SUM(ldd_drep.amount) FILTER (WHERE rdv.vote::text = 'No'), 0) + ( + CASE WHEN gov_action_proposal.type = 'NoConfidence' THEN 0 ELSE drep_voting_power.no_confidence END) no_votes, - COALESCE(SUM(ldd_drep.amount) FILTER (WHERE voting_procedure.vote::text = 'Abstain'), 0) + ( - CASE WHEN gov_action_proposal.type = 'NoConfidence' OR gov_action_proposal.type = 'HardForkInitiation' THEN - 0 - ELSE - drep_voting_power.abstain - END) abstain_votes, + COALESCE(SUM(ldd_drep.amount) FILTER (WHERE rdv.vote::text = 'Abstain'), 0) + drep_voting_power.abstain abstain_votes, COALESCE(ps.poolYesVotes, 0) pool_yes_votes, COALESCE(ps.poolNoVotes, 0) pool_no_votes, COALESCE(ps.poolAbstainVotes, 0) pool_abstain_votes, @@ -260,8 +274,9 @@ FROM LEFT JOIN cost_model AS cost_model ON proposal_params.cost_model_id = cost_model.id LEFT JOIN PoolVotes ps ON gov_action_proposal.id = ps.gov_action_proposal_id LEFT JOIN CommitteeVotes cv ON gov_action_proposal.id = cv.gov_action_proposal_id - LEFT JOIN voting_procedure ON voting_procedure.gov_action_proposal_id = gov_action_proposal.id - LEFT JOIN LatestDrepDistr ldd_drep ON ldd_drep.hash_id = voting_procedure.drep_voter + LEFT JOIN RankedDRepVotes rdv ON rdv.gov_action_proposal_id = gov_action_proposal.id AND rdv.rn = 1 + LEFT JOIN RankedDRepRegistration rdr ON rdr.drep_hash_id = rdv.drep_voter AND COALESCE(rdr.deposit, 0) >= 0 AND rdr.rn = 1 + LEFT JOIN LatestDrepDistr ldd_drep ON ldd_drep.hash_id = rdr.drep_hash_id AND ldd_drep.epoch_no = latest_epoch.no LEFT JOIN gov_action_proposal AS prev_gov_action ON gov_action_proposal.prev_gov_action_proposal = prev_gov_action.id LEFT JOIN tx AS prev_gov_action_tx ON prev_gov_action.tx_id = prev_gov_action_tx.id diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index 89b37cc3c..0a09024be 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -436,6 +436,7 @@ getNetworkMetrics = do , getNetworkMetricsResponseTotalGovernanceActions = networkMetricsTotalGovernanceActions , getNetworkMetricsResponseTotalDRepVotes = networkMetricsTotalDRepVotes , getNetworkMetricsResponseTotalRegisteredDReps = networkMetricsTotalRegisteredDReps + , getNetworkMetricsResponseTotalDRepDistr = networkMetricsTotalDRepDistr , getNetworkMetricsResponseTotalStakeControlledByDReps = networkMetricsTotalStakeControlledByDReps , getNetworkMetricsResponseTotalStakeControlledBySPOs = networkMetricsTotalStakeControlledBySPOs , getNetworkMetricsResponseTotalActiveDReps = networkMetricsTotalActiveDReps diff --git a/govtool/backend/src/VVA/Network.hs b/govtool/backend/src/VVA/Network.hs index 8b844d5d2..7187bb9b5 100644 --- a/govtool/backend/src/VVA/Network.hs +++ b/govtool/backend/src/VVA/Network.hs @@ -42,6 +42,7 @@ networkMetrics = withPool $ \conn -> do , total_gov_action_proposals , total_drep_votes , total_registered_dreps + , total_drep_distr , total_stake_controlled_by_dreps , total_stake_controlled_by_spos , total_active_dreps @@ -60,6 +61,7 @@ networkMetrics = withPool $ \conn -> do total_gov_action_proposals total_drep_votes total_registered_dreps + total_drep_distr total_stake_controlled_by_dreps total_stake_controlled_by_spos total_active_dreps diff --git a/govtool/frontend/yarn.lock b/govtool/frontend/yarn.lock index e0f4aac63..f24f8e693 100644 --- a/govtool/frontend/yarn.lock +++ b/govtool/frontend/yarn.lock @@ -1367,15 +1367,15 @@ resolved "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-asmjs/-/cardano-serialization-lib-asmjs-12.1.1.tgz" integrity sha512-K3f28QUfLDJ7seO6MtKfMYtRm5ccf36TQ5yxyTmZqX1TA85MkriEdxqpgV9KLiLEA95emwnlvU2/WmlHMRPg1A== -"@esbuild/darwin-arm64@0.21.5": +"@esbuild/linux-x64@0.21.5": version "0.21.5" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== -"@esbuild/darwin-arm64@0.24.2": +"@esbuild/linux-x64@0.24.2": version "0.24.2" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz" - integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.1" @@ -2162,10 +2162,15 @@ resolved "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz" integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== -"@parcel/watcher-darwin-arm64@2.5.0": +"@parcel/watcher-linux-x64-glibc@2.5.0": version "2.5.0" - resolved "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz" - integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + +"@parcel/watcher-linux-x64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== "@parcel/watcher@^2.4.1": version "2.5.0" @@ -2278,10 +2283,15 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-darwin-arm64@4.27.4": +"@rollup/rollup-linux-x64-gnu@4.27.4": version "4.27.4" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz" - integrity sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q== + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz" + integrity sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q== + +"@rollup/rollup-linux-x64-musl@4.27.4": + version "4.27.4" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz" + integrity sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -2860,10 +2870,15 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@swc/core-darwin-arm64@1.9.3": +"@swc/core-linux-x64-gnu@1.9.3": version "1.9.3" - resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.3.tgz" - integrity sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w== + resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.3.tgz" + integrity sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w== + +"@swc/core-linux-x64-musl@1.9.3": + version "1.9.3" + resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.3.tgz" + integrity sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg== "@swc/core@*", "@swc/core@^1.5.22", "@swc/core@^1.7.26": version "1.9.3" @@ -7169,16 +7184,6 @@ fs@^0.0.1-security: resolved "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz" integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w== -fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -fsevents@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"