Skip to content

Commit bbfdd1a

Browse files
committed
(fix): duplications in pool_stat table in db-sync
1 parent e9ebbde commit bbfdd1a

File tree

3 files changed

+55
-39
lines changed

3 files changed

+55
-39
lines changed

govtool/backend/sql/get-network-total-stake.sql

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,16 @@ TotalStakeControlledByActiveDReps AS (
6767
AND COALESCE(rd.deposit, 0) >= 0
6868
AND ((DRepActivity.epoch_no - GREATEST(COALESCE(lve.epoch_no, 0), COALESCE(rd.epoch_no, 0))) <= DRepActivity.drep_activity)
6969
),
70+
-- it's a fix for duplication issue https://github.com/IntersectMBO/cardano-db-sync/issues/1986
71+
LatestPoolStat AS (
72+
SELECT DISTINCT ON (pool_hash_id) *
73+
FROM
74+
pool_stat
75+
WHERE
76+
epoch_no = (SELECT MAX(no) FROM epoch)
77+
),
7078
TotalStakeControlledBySPOs AS (
71-
SELECT SUM(ps.stake)::bigint AS total FROM pool_stat ps WHERE ps.epoch_no = (SELECT no FROM CurrentEpoch)
79+
SELECT SUM(ps.stake)::bigint AS total FROM LatestPoolStat ps WHERE ps.epoch_no = (SELECT no FROM CurrentEpoch)
7280
),
7381
AlwaysAbstainVotingPower AS (
7482
SELECT COALESCE((SELECT amount FROM drep_hash
@@ -90,4 +98,4 @@ SELECT
9098
FROM TotalStakeControlledByActiveDReps
9199
LEFT JOIN TotalStakeControlledBySPOs ON TRUE
92100
LEFT JOIN AlwaysAbstainVotingPower ON TRUE
93-
LEFT JOIN AlwaysNoConfidenceVotingPower ON TRUE
101+
LEFT JOIN AlwaysNoConfidenceVotingPower ON TRUE

govtool/backend/sql/list-proposals.sql

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
WITH ActiveProposals AS (
2-
SELECT id
2+
SELECT id
33
FROM gov_action_proposal
44
WHERE expiration > (SELECT MAX(no) FROM epoch)
55
AND ratified_epoch IS NULL
@@ -97,11 +97,11 @@ EnrichedCurrentMembers AS (
9797
FROM
9898
ProcessedCurrentMembers pcm
9999
LEFT JOIN json_array_elements(pcm.current_members) AS member ON true
100-
LEFT JOIN CommitteeData cm
101-
ON (CASE
102-
WHEN (member->>'hash') ~ '^[0-9a-fA-F]+$'
103-
THEN encode(decode(member->>'hash', 'hex'), 'hex')
104-
ELSE NULL
100+
LEFT JOIN CommitteeData cm
101+
ON (CASE
102+
WHEN (member->>'hash') ~ '^[0-9a-fA-F]+$'
103+
THEN encode(decode(member->>'hash', 'hex'), 'hex')
104+
ELSE NULL
105105
END) = cm.hash
106106
GROUP BY
107107
pcm.id
@@ -113,15 +113,23 @@ RankedPoolVotes AS (
113113
vp.vote
114114
FROM
115115
voting_procedure vp
116-
WHERE
116+
WHERE
117117
vp.pool_voter IS NOT NULL
118118
AND vp.gov_action_proposal_id IN (SELECT id FROM ActiveProposals)
119-
ORDER BY
120-
vp.pool_voter,
121-
vp.gov_action_proposal_id,
119+
ORDER BY
120+
vp.pool_voter,
121+
vp.gov_action_proposal_id,
122122
vp.tx_id DESC,
123123
vp.id DESC
124124
),
125+
-- it's a fix for duplication issue https://github.com/IntersectMBO/cardano-db-sync/issues/1986
126+
LatestPoolStat AS (
127+
SELECT DISTINCT ON (pool_hash_id) *
128+
FROM
129+
pool_stat
130+
WHERE
131+
epoch_no = (SELECT MAX(no) FROM epoch)
132+
),
125133
PoolVotes AS (
126134
SELECT
127135
rpv.gov_action_proposal_id,
@@ -132,10 +140,10 @@ PoolVotes AS (
132140
SUM(CASE WHEN rpv.vote = 'Yes' THEN ps.voting_power ELSE 0 END) AS poolYesVotes,
133141
SUM(CASE WHEN rpv.vote = 'No' THEN ps.voting_power ELSE 0 END) AS poolNoVotes,
134142
SUM(CASE WHEN rpv.vote = 'Abstain' THEN ps.voting_power ELSE 0 END) AS poolAbstainVotes
135-
FROM
143+
FROM
136144
RankedPoolVotes rpv
137-
JOIN
138-
pool_stat ps
145+
JOIN
146+
LatestPoolStat ps
139147
ON rpv.pool_voter = ps.pool_hash_id
140148
WHERE
141149
ps.epoch_no = (SELECT MAX(no) FROM epoch)
@@ -147,29 +155,29 @@ RankedDRepVotes AS (
147155
vp.gov_action_proposal_id,
148156
vp.drep_voter,
149157
vp.vote
150-
FROM
158+
FROM
151159
voting_procedure vp
152-
WHERE
160+
WHERE
153161
vp.drep_voter IS NOT NULL
154162
AND vp.gov_action_proposal_id IN (SELECT id FROM ActiveProposals)
155-
ORDER BY
156-
vp.drep_voter,
157-
vp.gov_action_proposal_id,
163+
ORDER BY
164+
vp.drep_voter,
165+
vp.gov_action_proposal_id,
158166
vp.tx_id DESC,
159167
vp.id DESC
160168
),
161169
RankedDRepRegistration AS (
162170
SELECT DISTINCT ON (dr.drep_hash_id)
163171
dr.*
164-
FROM
172+
FROM
165173
drep_registration dr
166-
ORDER BY
174+
ORDER BY
167175
dr.drep_hash_id,
168176
dr.tx_id DESC,
169177
dr.id DESC
170178
),
171179
CommitteeVotes AS (
172-
SELECT
180+
SELECT
173181
vp.gov_action_proposal_id,
174182
SUM(CASE WHEN vp.vote = 'Yes' THEN 1 ELSE 0 END) AS ccYesVotes,
175183
SUM(CASE WHEN vp.vote = 'No' THEN 1 ELSE 0 END) AS ccNoVotes,
@@ -182,13 +190,13 @@ CommitteeVotes AS (
182190
FROM voting_procedure
183191
WHERE committee_voter IS NOT NULL
184192
AND gov_action_proposal_id IN (SELECT id FROM ActiveProposals)
185-
ORDER BY
186-
committee_voter,
187-
gov_action_proposal_id,
193+
ORDER BY
194+
committee_voter,
195+
gov_action_proposal_id,
188196
tx_id DESC,
189197
id DESC
190198
) vp
191-
GROUP BY
199+
GROUP BY
192200
vp.gov_action_proposal_id
193201
)
194202
SELECT
@@ -215,13 +223,13 @@ SELECT
215223

216224
WHEN gov_action_proposal.type::text = 'HardForkInitiation' THEN
217225
json_build_object(
218-
'major', (gov_action_proposal.description->'contents'->1->>'major')::int,
226+
'major', (gov_action_proposal.description->'contents'->1->>'major')::int,
219227
'minor', (gov_action_proposal.description->'contents'->1->>'minor')::int
220228
)
221229

222230
WHEN gov_action_proposal.type::text = 'NoConfidence' THEN
223231
json_build_object('data', gov_action_proposal.description->'contents')
224-
232+
225233
WHEN gov_action_proposal.type::text = 'ParameterChange' THEN
226234
json_build_object('data', gov_action_proposal.description->'contents')
227235

@@ -237,12 +245,12 @@ SELECT
237245
'tag', pd.tag,
238246
'members', em.enriched_members,
239247
'membersToBeRemoved', mtr.members_to_be_removed,
240-
'threshold',
241-
CASE
242-
WHEN (pd.threshold->>'numerator') IS NOT NULL
243-
AND (pd.threshold->>'denominator') IS NOT NULL
248+
'threshold',
249+
CASE
250+
WHEN (pd.threshold->>'numerator') IS NOT NULL
251+
AND (pd.threshold->>'denominator') IS NOT NULL
244252
THEN (pd.threshold->>'numerator')::float / (pd.threshold->>'denominator')::float
245-
ELSE NULL
253+
ELSE NULL
246254
END
247255
)
248256
FROM
@@ -260,9 +268,9 @@ SELECT
260268
, '{}'::JSON) AS description,
261269
CASE
262270
WHEN meta.network_name::text = 'mainnet' OR meta.network_name::text = 'preprod' THEN
263-
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '5 days'
271+
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '5 days'
264272
ELSE
265-
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '1 day'
273+
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '1 day'
266274
END AS expiry_date,
267275
gov_action_proposal.expiration,
268276
creator_block.time,
@@ -271,7 +279,7 @@ SELECT
271279
encode(voting_anchor.data_hash, 'hex') data_hash,
272280
jsonb_set(
273281
ROW_TO_JSON(proposal_params)::jsonb,
274-
'{cost_model}',
282+
'{cost_model}',
275283
CASE
276284
WHEN cost_model.id IS NOT NULL THEN
277285
ROW_TO_JSON(cost_model)::jsonb
@@ -339,7 +347,7 @@ FROM
339347
LEFT JOIN LatestDrepDistr ldd_drep ON ldd_drep.hash_id = rdr.drep_hash_id
340348
AND ldd_drep.epoch_no = latest_epoch.no
341349
LEFT JOIN gov_action_proposal AS prev_gov_action ON gov_action_proposal.prev_gov_action_proposal = prev_gov_action.id
342-
LEFT JOIN tx AS prev_gov_action_tx ON prev_gov_action.tx_id = prev_gov_action_tx.id
350+
LEFT JOIN tx AS prev_gov_action_tx ON prev_gov_action.tx_id = prev_gov_action_tx.id
343351
WHERE
344352
(COALESCE(?, '') = '' OR
345353
off_chain_vote_gov_action_data.title ILIKE ? OR

govtool/backend/src/VVA/Config.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,4 @@ getServerPort = asks (serverPort . getter)
185185
getServerHost ::
186186
(Has VVAConfig r, MonadReader r m) =>
187187
m Text
188-
getServerHost = asks (serverHost . getter)
188+
getServerHost = asks (serverHost . getter)

0 commit comments

Comments
 (0)