Skip to content

Commit aa05f2c

Browse files
committed
added get_rewards_by_addresses_and_time_group_by_service and get_rewards_by_addresses_and_time_group_by_address_and_date functions
1 parent 5c61fc2 commit aa05f2c

File tree

5 files changed

+115
-1
lines changed

5 files changed

+115
-1
lines changed

src/mappings/dbFunctions/dataByDelegatorAddressesAndBlocks.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ AS $$
3030
SUM(mcc.num_claimed_computed_units) AS claim_computed_units,
3131
SUM(mcc.claimed_amount) AS claim_upokt
3232
FROM ${dbSchema}.msg_create_claims mcc
33+
INNER JOIN matched_suppliers ms ON ms.supplier_id = mcc.supplier_id
3334
WHERE mcc.block_id BETWEEN start_height AND end_height
3435
GROUP BY mcc.supplier_id
3536
),
@@ -42,6 +43,7 @@ AS $$
4243
SUM(ecs.num_claimed_computed_units) AS proof_computed_units,
4344
SUM(ecs.claimed_amount) AS proof_upokt
4445
FROM ${dbSchema}.event_claim_settleds ecs
46+
INNER JOIN matched_suppliers ms ON ms.supplier_id = ecs.supplier_id
4547
WHERE ecs.block_id BETWEEN start_height AND end_height
4648
GROUP BY ecs.supplier_id
4749
),
@@ -51,6 +53,7 @@ AS $$
5153
ess.supplier_id,
5254
SUM(ess.previous_stake_amount - ess.after_stake_amount) AS slashed
5355
FROM ${dbSchema}.event_supplier_slasheds ess
56+
INNER JOIN matched_suppliers ms ON ms.supplier_id = ess.supplier_id
5457
WHERE ess.block_id BETWEEN start_height AND end_height
5558
GROUP BY ess.supplier_id
5659
)

src/mappings/dbFunctions/dataByDelegatorAddressesAndTimes.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ AS $$
3131
SUM(mcc.claimed_amount) AS claim_upokt
3232
FROM ${dbSchema}.msg_create_claims mcc
3333
INNER JOIN ${dbSchema}.blocks b ON b.id = mcc.block_id
34+
INNER JOIN matched_suppliers ms ON ms.supplier_id = mcc.supplier_id
3435
WHERE b.timestamp BETWEEN start_ts AND end_ts
3536
GROUP BY mcc.supplier_id
3637
),
@@ -44,6 +45,7 @@ AS $$
4445
SUM(ecs.claimed_amount) AS proof_upokt
4546
FROM ${dbSchema}.event_claim_settleds ecs
4647
INNER JOIN ${dbSchema}.blocks b ON b.id = ecs.block_id
48+
INNER JOIN matched_suppliers ms ON ms.supplier_id = ecs.supplier_id
4749
WHERE b.timestamp BETWEEN start_ts AND end_ts
4850
GROUP BY ecs.supplier_id
4951
),
@@ -54,6 +56,7 @@ AS $$
5456
SUM(ess.previous_stake_amount - ess.after_stake_amount) AS slashed
5557
FROM ${dbSchema}.event_supplier_slasheds ess
5658
INNER JOIN ${dbSchema}.blocks b ON b.id = ess.block_id
59+
INNER JOIN matched_suppliers ms ON ms.supplier_id = ess.supplier_id
5760
WHERE b.timestamp BETWEEN start_ts AND end_ts
5861
GROUP BY ess.supplier_id
5962
)

src/mappings/dbFunctions/index.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ import { updateTookOnBlocksFn } from "./reports/took";
2222
import { updateTxsDataOnBlockFn } from "./reports/txs";
2323
import { updateStakedValidatorsDataOnBlockFn, updateUnstakingValidatorsDataOnBlockFn } from "./reports/validators";
2424
import { getRewardsByDate } from "./rewards";
25-
import { getRewardsByAddressesAndTime, getRewardsByAddressesAndTimeGroupByDate } from "./rewardsByAddressesAndTime";
25+
import {
26+
getRewardsByAddressesAndTime,
27+
getRewardsByAddressesAndTimeGroupByDate,
28+
getRewardsByAddressesAndTimeGroupByDateAndAddress,
29+
} from "./rewardsByAddressesAndTime";
30+
import { getRewardsByDelegatorAddressesAndTimesGroupByServiceFn } from "./rewardsByAddressesAndTimes";
2631
import { getSuppliersStakedAndBlocksByPointJsonFn } from "./supplierStakedAndBlocksPoints";
2732

2833
const functionsCreatedCacheKey = 'functionsCreated';
@@ -57,6 +62,8 @@ export async function createDbFunctions(): Promise<void> {
5762
getDataByDelegatorAddressesAndBlocksFn,
5863
getRewardsByAddressesAndTime,
5964
getRewardsByAddressesAndTimeGroupByDate,
65+
getRewardsByAddressesAndTimeGroupByDateAndAddress,
66+
getRewardsByDelegatorAddressesAndTimesGroupByServiceFn,
6067
getRewardsByDate,
6168
)
6269

src/mappings/dbFunctions/rewardsByAddressesAndTime.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,38 @@ BEGIN
4949
END;
5050
$$ LANGUAGE plpgsql STABLE;`
5151
}
52+
53+
export function getRewardsByAddressesAndTimeGroupByDateAndAddress(dbSchema: string): string {
54+
return `CREATE OR REPLACE FUNCTION ${dbSchema}.get_rewards_by_addresses_and_time_group_by_address_and_date(
55+
addresses TEXT[],
56+
start_date TIMESTAMP,
57+
end_date TIMESTAMP,
58+
trunc_interval TEXT -- 'day' or 'hour'
59+
)
60+
RETURNS JSON AS $$
61+
BEGIN
62+
RETURN (
63+
SELECT json_agg(
64+
json_build_object(
65+
'address', address,
66+
'date_truncated', date_truncated,
67+
'total_amount', total_amount
68+
)
69+
ORDER BY date_truncated
70+
)
71+
FROM (
72+
SELECT
73+
t.recipient_id as address,
74+
date_trunc(trunc_interval, b.timestamp) AS date_truncated,
75+
SUM(t.amount)::NUMERIC AS total_amount
76+
FROM ${dbSchema}.mod_to_acct_transfers t
77+
INNER JOIN ${dbSchema}.blocks b ON b.id = t.block_id
78+
WHERE t.recipient_id = ANY(addresses)
79+
AND b.timestamp BETWEEN start_date AND end_date
80+
GROUP BY address, date_truncated
81+
ORDER BY date_truncated
82+
) subquery
83+
);
84+
END;
85+
$$ LANGUAGE plpgsql STABLE;`
86+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// Used to get the proof, claim and slash data between block timestamps and for the list of delegator addresses
2+
export function getRewardsByDelegatorAddressesAndTimesGroupByServiceFn (dbSchema: string): string {
3+
return `CREATE OR REPLACE FUNCTION ${dbSchema}.get_rewards_by_addresses_and_time_group_by_service(
4+
addresses TEXT[],
5+
start_ts TIMESTAMP,
6+
end_ts TIMESTAMP
7+
)
8+
RETURNS jsonb
9+
LANGUAGE sql
10+
STABLE
11+
AS $$
12+
WITH matched_suppliers AS (
13+
SELECT
14+
distinct ssc.supplier_id,
15+
elem->>'address' AS address
16+
FROM ${dbSchema}.supplier_service_configs ssc
17+
INNER JOIN ${dbSchema}.suppliers s ON s.id = ssc.supplier_id
18+
CROSS JOIN jsonb_array_elements(ssc.rev_share) AS elem
19+
WHERE elem->>'address' = ANY (addresses)
20+
AND upper_inf(ssc._block_range)
21+
AND s.stake_status = 'Staked'
22+
AND upper_inf(s._block_range)
23+
),
24+
services as (
25+
SELECT
26+
distinct ssc.service_id
27+
FROM ${dbSchema}.supplier_service_configs ssc
28+
INNER JOIN matched_suppliers ON ssc.supplier_id = matched_suppliers.supplier_id
29+
WHERE upper_inf(ssc._block_range)
30+
),
31+
rewards as (
32+
SELECT
33+
e.service_id,
34+
SUM(m.amount) net_rewards,
35+
SUM(e.claimed_amount) gross_rewards,
36+
SUM(e.num_relays) relays,
37+
SUM(e.num_claimed_computed_units) computed_units
38+
FROM ${dbSchema}.mod_to_acct_transfers m
39+
INNER JOIN ${dbSchema}.blocks b ON b.id = m.block_id
40+
INNER JOIN ${dbSchema}.event_claim_settleds e ON e.id = m.event_claim_settled_id
41+
WHERE m.recipient_id = ANY (addresses) AND
42+
b.timestamp BETWEEN start_ts AND end_ts
43+
GROUP BY e.service_id
44+
)
45+
46+
SELECT jsonb_agg(
47+
jsonb_build_object(
48+
'service_id', service_id,
49+
'relays', COALESCE(relays, 0),
50+
'computed_units', COALESCE(computed_units, 0),
51+
'gross_rewards', COALESCE(gross_rewards, 0),
52+
'net_rewards', COALESCE(net_rewards, 0)
53+
)
54+
) FROM (
55+
SELECT
56+
COALESCE(s.service_id, r.service_id, '') as service_id,
57+
r.relays as relays,
58+
r.computed_units as computed_units,
59+
r.gross_rewards as gross_rewards,
60+
r.net_rewards net_rewards
61+
FROM services s
62+
LEFT JOIN rewards r ON r.service_id = s.service_id
63+
);
64+
$$;
65+
`
66+
}

0 commit comments

Comments
 (0)