我想查询 Covalent 数据库,以了解在 RSK 区块链上最近 100 次 rUSDT 代币转移交易中支付的 gas 量。
在下面的 SQL 查询中,我试图连接这两个表以找出为最近 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;
不幸的是,这个查询似乎需要很长时间才能处理。
如何修改此查询?
更多背景:
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
是 ERC20Transfer
事件日志的主题 ID。0xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96
是 ERC20 代币的智能合约。\\x
Postgres 的格式bytea
用于将十六进制值键入为字符串字面量,可以认为等同于0x
前缀。- 在 Covalent 数据库中,
chain_rsk_mainnet.block_log_events
是一张包含 RSK 主网上智能合约发出的所有事件的表 - 在 Covalent 数据库中,
chain_rsk_mainnet.block_transactions
是一个包含所有 RSK 主网交易详细信息的表 - 匹配两次的原因
e.topics
是性能优化。严格来说,只有后一种是必要的。