Skip to content

Commit f78ee28

Browse files
authored
Update voting_power_from_locks_unlocks CTE (#114)
1 parent d5619ea commit f78ee28

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

sql_files/views/registered_voters.sql

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -93,35 +93,36 @@ receipt_actions_prep AS (
9393
)
9494
/* Sourcing Latest Voting Power from Locks + Unlocks */
9595
, voting_power_from_locks_unlocks AS (
96-
SELECT
97-
vplu.*
98-
FROM (
99-
SELECT
100-
ra.block_timestamp
101-
, ra.receipt_id
102-
, COALESCE(CASE
103-
WHEN safe_json_parse(REPLACE(ra.action_logs[1], 'EVENT_JSON:', ''))->>'error' IS NULL
104-
THEN safe_json_parse(REPLACE(ra.action_logs[1], 'EVENT_JSON:', ''))->'data'->0->>'account_id'
105-
ELSE NULL
106-
END
107-
, ra.signer_account_id) AS registered_voter_id
108-
, CASE
109-
WHEN safe_json_parse(REPLACE(ra.action_logs[1], 'EVENT_JSON:', ''))->>'error' IS NULL
110-
THEN (safe_json_parse(REPLACE(ra.action_logs[1], 'EVENT_JSON:', ''))->'data'->0->>'locked_near_balance')::NUMERIC
111-
ELSE NULL
112-
END AS voting_power_from_locks_unlocks
113-
, CASE
114-
WHEN safe_json_parse(REPLACE(ra.action_logs[1], 'EVENT_JSON:', ''))->>'error' IS NULL
115-
THEN (safe_json_parse(REPLACE(ra.action_logs[1], 'EVENT_JSON:', ''))->'data'->0->>'timestamp')::NUMERIC
116-
ELSE NULL
117-
END AS lockup_update_at_ns --Timestamp (nanoseconds) when user locks or unlocks near
118-
, ROW_NUMBER() OVER (PARTITION BY signer_account_id ORDER BY block_timestamp DESC) AS row_num
119-
FROM receipt_actions_prep AS ra
120-
WHERE
121-
ra.method_name = 'on_lockup_update'
122-
) AS vplu
123-
WHERE
124-
vplu.row_num = 1
96+
SELECT DISTINCT ON (rap.signer_account_id)
97+
rap.block_timestamp,
98+
rap.receipt_id,
99+
-- same semantics as before (prefer account_id from logs, fall back to signer)
100+
COALESCE(
101+
CASE
102+
WHEN (fastnear.safe_json_parse(replace(rap.action_logs[1], 'EVENT_JSON:', '')) ->> 'error') IS NULL
103+
THEN (fastnear.safe_json_parse(replace(rap.action_logs[1], 'EVENT_JSON:', '')) -> 'data' -> 0 ->> 'account_id')
104+
ELSE NULL
105+
END,
106+
rap.signer_account_id
107+
) AS registered_voter_id,
108+
CASE
109+
WHEN (fastnear.safe_json_parse(replace(rap.action_logs[1], 'EVENT_JSON:', '')) ->> 'error') IS NULL
110+
THEN ((fastnear.safe_json_parse(replace(rap.action_logs[1], 'EVENT_JSON:', '')) -> 'data' -> 0 ->> 'locked_near_balance'))::numeric
111+
ELSE NULL
112+
END AS voting_power_from_locks_unlocks,
113+
CASE
114+
WHEN (fastnear.safe_json_parse(replace(rap.action_logs[1], 'EVENT_JSON:', '')) ->> 'error') IS NULL
115+
THEN ((fastnear.safe_json_parse(replace(rap.action_logs[1], 'EVENT_JSON:', '')) -> 'data' -> 0 ->> 'timestamp'))::numeric
116+
ELSE NULL
117+
END AS lockup_update_at_ns,
118+
1 AS row_num -- keep compatibility with downstream "WHERE row_num = 1"
119+
FROM receipt_actions_prep AS rap
120+
WHERE
121+
rap.method_name = 'on_lockup_update'
122+
ORDER BY
123+
rap.signer_account_id, -- DISTINCT ON key
124+
rap.block_timestamp DESC, -- "latest" first
125+
rap.receipt_id DESC -- deterministic tie-breaker
125126
)
126127
/* Sourcing Registered Voters from Deploy Lockup Event (Excluding dupes due to account already being registered) */
127128
--Whenever a user registers to vote, there should always be a non-null storage deposit, aka, initial voting power amount.

0 commit comments

Comments
 (0)