@@ -10,6 +10,12 @@ arrayFilter(x -> x != '', {contract:Array(String)}) AS contracts,
1010(length(to_addresses) > 0 ) AS has_to,
1111(length(contracts) > 0 ) AS has_contract,
1212has_contract AND (NOT has_from) AND (NOT has_to) AS has_only_contract,
13+ toRelativeMinuteNum(toDateTime({start_time:UInt64})) AS start_minute,
14+ toRelativeMinuteNum(toDateTime({end_time:UInt64})) AS end_minute,
15+ {start_time:UInt64} = 1420070400 AS no_start_time,
16+ {end_time:UInt64} = 2524608000 AS no_end_time,
17+ {start_block:UInt64} = 0 AS no_start_block,
18+ {end_block:UInt64} = 9999999999 AS no_end_block,
1319
1420tx_hash_timestamps AS (
1521 SELECT (minute, timestamp )
@@ -35,8 +41,8 @@ contract_minutes AS (
3541 SELECT minute
3642 FROM trc20_transfer
3743 WHERE has_only_contract
38- AND ({start_time:UInt64} = 1420070400 OR timestamp >= toRelativeMinuteNum(toDateTime({start_time:UInt64})) )
39- AND ({end_time:UInt64} = 2524608000 OR timestamp <= toRelativeMinuteNum(toDateTime({end_time:UInt64})) )
44+ AND (no_start_time OR minute >= start_minute )
45+ AND (no_end_time OR minute <= end_minute )
4046 AND log_address IN {contract:Array(String)}
4147 GROUP BY minute
4248 ORDER BY minute DESC
@@ -46,11 +52,9 @@ transfers AS (
4652 SELECT *
4753 FROM trc20_transfer
4854 WHERE
49- /* filter by timestamp and block_num early to reduce data scanned */
50- ({start_time:UInt64} = 1420070400 OR timestamp >= toDateTime({start_time:UInt64}))
51- AND ({end_time:UInt64} = 2524608000 OR timestamp <= toDateTime({end_time:UInt64}))
52- AND ({start_block:UInt64} = 0 OR block_num >= {start_block:UInt64})
53- AND ({end_block:UInt64} = 9999999999 OR block_num <= {end_block:UInt64})
55+ /* direct minutes */
56+ (no_start_time OR minute >= start_minute)
57+ AND (no_end_time OR minute <= end_minute)
5458
5559 /* transaction ID filter */
5660 AND ( NOT has_tx_hash OR (minute, timestamp ) IN tx_hash_timestamps AND tx_hash IN {transaction_id:Array(String)} )
@@ -65,6 +69,12 @@ transfers AS (
6569 AND ( NOT has_to OR ` to` IN {to_address:Array(String)} )
6670 AND ( NOT has_contract OR log_address IN {contract:Array(String)} )
6771
72+ /* timestamp and block_num filters */
73+ AND (no_start_block OR block_num >= {start_block:UInt64})
74+ AND (no_end_block OR block_num <= {end_block:UInt64})
75+ AND (no_start_time OR timestamp >= toDateTime({start_time:UInt64}))
76+ AND (no_end_time OR timestamp <= toDateTime({end_time:UInt64}))
77+
6878 ORDER BY minute DESC , timestamp DESC , block_num DESC , tx_index DESC , log_index DESC
6979 LIMIT {limit :UInt64}
7080 OFFSET {offset:UInt64}
@@ -102,7 +112,14 @@ SELECT
102112 ` to` ,
103113 toString(t .amount ) AS amount,
104114
115+ /* token metadata */
116+ t .amount / pow(10 , decimals) AS value,
117+ name,
118+ symbol,
119+ decimals,
120+
105121 /* network */
106122 {network:String} AS network
107123FROM transfers AS t
124+ LEFT JOIN metadata m ON t .log_address = m .contract
108125ORDER BY minute DESC , timestamp DESC , block_num DESC , tx_index DESC , log_index DESC ;
0 commit comments