@@ -6,7 +6,8 @@ import { BreakdownAdapter } from "../../adapters/types";
6
6
const DAILY_VOL_ENDPOINT =
7
7
"https://mainnet-beta.api.drift.trade/stats/24HourVolume" ;
8
8
9
- const DUNE_QUERY_ID = "3756979" ;
9
+ // const DUNE_QUERY_ID = "3756979"; // https://dune.com/queries/3756979/6318568
10
+ const DUNE_QUERY_ID = "3782153" ; // Should be faster than the above - https://dune.com/queries/3782153/6359334
10
11
11
12
type DimentionResult = {
12
13
dailyVolume ?: number ;
@@ -15,19 +16,26 @@ type DimentionResult = {
15
16
dailyRevenue ?: number ;
16
17
} ;
17
18
18
- async function getPerpDimensions ( ) : Promise < DimentionResult > {
19
+ const sum = ( values : number [ ] ) => values . reduce ( ( a , b ) => a + b , 0 ) ;
20
+
21
+ // This is the previous method for query_id 3756979 which was too slow .. saving for posterity if we manage to speed it up.
22
+ async function _getPerpDimensions ( ) : Promise < DimentionResult > {
19
23
const resultRows = await queryDune ( DUNE_QUERY_ID ) ;
20
24
21
- const summaryRow = resultRows . find ( ( row ) => row . market_index === null ) ;
25
+ const marketRows = resultRows . filter (
26
+ ( row ) => row . market_index !== null && row . market_index >= 0
27
+ ) ;
22
28
23
29
// Perp Volume
24
- const dailyVolume = summaryRow . total_volume as number ;
30
+ const dailyVolume = sum ( marketRows . map ( ( row ) => row . total_volume as number ) ) ;
25
31
26
32
// All taker fees paid
27
- const dailyFees = summaryRow . total_taker_fee as number ;
33
+ const dailyFees = sum ( marketRows . map ( ( row ) => row . total_taker_fee as number ) ) ;
28
34
29
35
// All taker fees paid, minus maker rebates paid - not sure if this should be used as the "dailyFees" number instead.
30
- const dailyRevenue = summaryRow . total_revenue as number ;
36
+ const dailyRevenue = sum (
37
+ marketRows . map ( ( row ) => row . total_revenue as number )
38
+ ) ;
31
39
32
40
return {
33
41
dailyVolume,
@@ -37,6 +45,19 @@ async function getPerpDimensions(): Promise<DimentionResult> {
37
45
} ;
38
46
}
39
47
48
+ async function getPerpDimensions ( ) : Promise < DimentionResult > {
49
+ const resultRows = await queryDune ( DUNE_QUERY_ID ) ;
50
+
51
+ const { perpetual_volume, total_revenue, total_taker_fee } = resultRows [ 0 ] ;
52
+
53
+ return {
54
+ dailyVolume : perpetual_volume ,
55
+ dailyFees : total_taker_fee ,
56
+ dailyUserFees : total_taker_fee ,
57
+ dailyRevenue : total_revenue ,
58
+ } ;
59
+ }
60
+
40
61
async function getSpotDimensions ( ) : Promise < DimentionResult > {
41
62
const volumeResponse = await httpGet (
42
63
`${ DAILY_VOL_ENDPOINT } ?spotMarkets=true`
@@ -72,21 +93,24 @@ async function fetch(type: "perp" | "spot") {
72
93
} ;
73
94
}
74
95
}
75
- const emtry = async ( timestamp : number ) => { return { timestamp} }
96
+
97
+ // Used to replace "fetch" to disable a query if it starts failing
98
+ const emtry = async ( timestamp : number ) => {
99
+ return { timestamp } ;
100
+ } ;
101
+
76
102
const adapter : BreakdownAdapter = {
77
103
breakdown : {
78
104
swap : {
79
105
[ CHAIN . SOLANA ] : {
80
- // fetch: () => fetch("spot"),
81
- fetch : emtry ,
106
+ fetch : ( ) => fetch ( "spot" ) ,
82
107
runAtCurrTime : true ,
83
108
start : 1690239600 ,
84
109
} ,
85
110
} ,
86
111
derivatives : {
87
112
[ CHAIN . SOLANA ] : {
88
- // // fetch: () => fetch("perp"),
89
- fetch : emtry ,
113
+ fetch : ( ) => fetch ( "perp" ) ,
90
114
runAtCurrTime : true ,
91
115
start : 1690239600 ,
92
116
} ,
0 commit comments