Skip to content

Commit 989a218

Browse files
authored
Merge pull request #1548 from blockful/refactor/DEV-199_implement_DAO_daily_metric_buckets
Refactor/dev 199 implement dao daily metric buckets
2 parents 061e35b + 405c8df commit 989a218

File tree

35 files changed

+7879
-18496
lines changed

35 files changed

+7879
-18496
lines changed

apps/api-gateway/meshrc.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export default processConfig(
3535
"Query.!{accounts}",
3636
"Query.!{account}",
3737
"Query.!{daoMetricsDayBucket}",
38+
"Query.!{daoMetricsDayBuckets}",
3839
"Query.!{proposalsOnchains}",
3940
"Query.!{proposalsOnchain}",
4041
"Query.!{tokenPrices}",

apps/api-gateway/schema.graphql

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,15 @@ type Query {
159159
"""Returns current governance parameters for this DAO"""
160160
dao: dao_200_response
161161

162+
"""Returns a mapping of the top voting power changes within a time frame"""
163+
topVotingPowerVariations(limit: PositiveInt = 10, skip: NonNegativeInt, orderDirection: queryInput_topVotingPowerVariations_orderDirection = desc, fromDate: String, toDate: String): topVotingPowerVariations_200_response
164+
165+
"""
166+
Returns token related metrics for a single metric type.
167+
Available types: TOTAL_SUPPLY, DELEGATED_SUPPLY, CEX_SUPPLY, DEX_SUPPLY, LENDING_SUPPLY, CIRCULATING_SUPPLY, TREASURY
168+
"""
169+
tokenMetrics(metricType: queryInput_tokenMetrics_metricType!, startDate: Float, endDate: Float, orderDirection: queryInput_tokenMetrics_orderDirection = asc, limit: NonNegativeInt = 365, skip: NonNegativeInt): tokenMetrics_200_response
170+
162171
"""
163172
Average delegation percentage across all supported DAOs by day.
164173
Returns the mean delegation percentage for each day in the specified range.
@@ -2102,6 +2111,61 @@ enum HTTPMethod {
21022111
PATCH
21032112
}
21042113

2114+
type topVotingPowerVariations_200_response {
2115+
period: query_topVotingPowerVariations_period!
2116+
items: [query_topVotingPowerVariations_items_items]!
2117+
}
2118+
2119+
type query_topVotingPowerVariations_period {
2120+
startTimestamp: String!
2121+
endTimestamp: String!
2122+
}
2123+
2124+
type query_topVotingPowerVariations_items_items {
2125+
accountId: String!
2126+
previousVotingPower: String!
2127+
currentVotingPower: String!
2128+
absoluteChange: String!
2129+
percentageChange: String!
2130+
}
2131+
2132+
enum queryInput_topVotingPowerVariations_orderDirection {
2133+
asc
2134+
desc
2135+
}
2136+
2137+
type tokenMetrics_200_response {
2138+
items: [query_tokenMetrics_items_items]!
2139+
pageInfo: query_tokenMetrics_pageInfo!
2140+
}
2141+
2142+
type query_tokenMetrics_items_items {
2143+
date: String!
2144+
high: String!
2145+
volume: String!
2146+
}
2147+
2148+
type query_tokenMetrics_pageInfo {
2149+
hasNextPage: Boolean!
2150+
startDate: String
2151+
endDate: String
2152+
}
2153+
2154+
enum queryInput_tokenMetrics_metricType {
2155+
TOTAL_SUPPLY
2156+
DELEGATED_SUPPLY
2157+
CEX_SUPPLY
2158+
DEX_SUPPLY
2159+
LENDING_SUPPLY
2160+
CIRCULATING_SUPPLY
2161+
TREASURY
2162+
}
2163+
2164+
enum queryInput_tokenMetrics_orderDirection {
2165+
asc
2166+
desc
2167+
}
2168+
21052169
type AverageDelegationPercentageItem {
21062170
date: String!
21072171
high: String!

apps/dashboard/features/attack-profitability/components/AttackProfitabilityCustomTooltip.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const AttackProfitabilityCustomTooltip: React.FC<
1010
> = ({ active, payload, label, chartConfig }) => {
1111
if (!active || !payload || payload.length === 0) return null;
1212

13-
const date = new Date(label).toLocaleDateString("en-US", {
13+
const date = new Date(Number(label) * 1000).toLocaleDateString("en-US", {
1414
month: "short",
1515
day: "2-digit",
1616
});

apps/dashboard/features/attack-profitability/components/MultilineChartAttackProfitability.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { useParams } from "next/navigation";
1515

1616
import { TimeInterval } from "@/shared/types/enums/TimeInterval";
1717
import {
18-
DaoMetricsDayBucket,
18+
TokenMetricItem,
1919
MultilineChartDataSetPoint,
2020
} from "@/shared/dao-config/types";
2121
import { useDaoData, useTimeSeriesData } from "@/shared/hooks";
@@ -115,7 +115,7 @@ export const MultilineChartAttackProfitability = ({
115115
) satisfies ChartConfig;
116116

117117
const chartData = useMemo(() => {
118-
let delegatedSupplyChart: DaoMetricsDayBucket[] = [];
118+
let delegatedSupplyChart: TokenMetricItem[] = [];
119119
if (timeSeriesData) {
120120
delegatedSupplyChart = timeSeriesData[MetricTypesEnum.DELEGATED_SUPPLY];
121121
}

apps/dashboard/features/attack-profitability/utils/normalizeDataset.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import {
22
PriceEntry,
3-
DaoMetricsDayBucket,
3+
TokenMetricItem,
44
MultilineChartDataSetPoint,
55
} from "@/shared/dao-config/types";
66
import { formatUnits } from "viem";
77

88
export function normalizeDataset(
99
tokenPrices: PriceEntry[],
1010
key: string,
11-
multiplier: number | Pick<DaoMetricsDayBucket, "date" | "high">[],
11+
multiplier: number | Pick<TokenMetricItem, "date" | "high">[],
1212
decimals: number,
1313
): MultilineChartDataSetPoint[] {
1414
if (!Array.isArray(multiplier)) {

apps/dashboard/features/token-distribution/hooks/useChartMetrics.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { useProposals } from "@/features/token-distribution/hooks/useProposals";
77
import { DaoIdEnum } from "@/shared/types/daos";
88
import { MetricTypesEnum } from "@/shared/types/enums/metric-type";
99
import { TimeInterval } from "@/shared/types/enums/TimeInterval";
10-
import { DaoMetricsDayBucket, PriceEntry } from "@/shared/dao-config/types";
10+
import { TokenMetricItem, PriceEntry } from "@/shared/dao-config/types";
1111
import { ChartDataSetPoint } from "@/shared/dao-config/types";
1212
import { MetricSchema } from "@/features/token-distribution/utils/metrics";
1313
import { normalizeTimestamp } from "@/features/token-distribution/utils/chart";
@@ -155,7 +155,7 @@ export const useChartMetrics = ({
155155
}
156156

157157
if (timeSeriesData[dataSourceKey]) {
158-
timeSeriesData[dataSourceKey].forEach((item: DaoMetricsDayBucket) => {
158+
timeSeriesData[dataSourceKey].forEach((item: TokenMetricItem) => {
159159
const value = valueField === "volume" ? item.volume : item.high;
160160

161161
result[normalizeTimestamp(item.date)] = {

0 commit comments

Comments
 (0)