如何找出在 RSK 上代币的最新交易支付的汽油费?

How to find out gas fees paid for the latest transactions of a token on RSK?

我想查询 Covalent 数据库,找出 RSK 区块链上最近 100 笔 rUSDT 代币转账交易中支付的 gas 数量。

在下面的 SQL 查询中,我试图加入这两个 table 以找出最近 100 笔交易中每笔支付的汽油费。

SELECT
  t.fees_paid
FROM chain_rsk_mainnet.block_log_events e 
INNER JOIN chain_rsk_mainnet.block_transactions t ON
  e.block_id = t.block_id
  AND e.tx_offset = t.tx_offset
WHERE 
  e.topics @> array[E'\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'::bytea]
  AND e.topics[1] = E'\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
  AND e.sender = E'\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'
ORDER BY e.block_id DESC, e.tx_offset DESC
LIMIT 100;

很遗憾,此查询的处理时间似乎过长。

如何修改此查询?

更多上下文:

您需要在查询中设置一个日期范围,否则它会 运行 很长时间。 RSK 上有大量 rUSDT Transfer 事件日志。 扫描完整的 table 以找到所有这些, 并且一次加入这些是这个查询花费时间太长的根本原因。

为了解决这个问题,对于每个 table 加入, 为时间相关字段添加条件 (block_log_events.block_signed_atblock_transactions.signed_at), 将它限制在某个时间间隔内,比如一个月:

AND e.block_signed_at > NOW() - INTERVAL '1 month' AND e.block_signed_at <= NOW()
AND t.signed_at > NOW() - INTERVAL '1 month' AND t.signed_at <= NOW()

完整查询如下:

SELECT
  t.fees_paid
FROM chain_rsk_mainnet.block_log_events e 
INNER JOIN chain_rsk_mainnet.block_transactions t ON
  e.block_id = t.block_id
  AND e.tx_offset = t.tx_offset
WHERE 
  e.topics @> array[E'\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'::bytea]
  AND e.topics[1] = E'\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
  AND e.sender = E'\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'
  AND e.block_signed_at > NOW() - INTERVAL '1 month' AND e.block_signed_at <= NOW()
  AND t.signed_at > NOW() - INTERVAL '1 month' AND t.signed_at <= NOW()
ORDER BY e.block_id DESC, e.tx_offset DESC
LIMIT 100;