【问题标题】:How to find out gas fees paid for the latest transactions of a token on RSK?如何找出在 RSK 上为代币的最新交易支付的汽油费?
【发布时间】:2021-11-29 11:56:40
【问题描述】:

我想查询 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 是 ERC20 Transfer 事件日志的主题 ID。
  • 0xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96是ERC20代币的智能合约。
  • Postgres 的bytea 格式中的\\x 用于将十六进制值键入为字符串文字, 可以认为等同于0x 前缀。
  • 在 Covalent 数据库中,chain_rsk_mainnet.block_log_events 是 包含 RSK 主网上智能合约发出的所有事件的表格
  • 在 Covalent 数据库中,chain_rsk_mainnet.block_transactions 是一个包含所有 RSK 主网交易详细信息的表
  • e.topics 匹配两次的原因是性能优化。 严格来说,只有后一种是必要的。

【问题讨论】:

    标签: sql rsk


    【解决方案1】:

    您需要在查询中设置日期范围,否则它将运行很长时间。 RSK 上有大量 rUSDT Transfer 事件日志。 扫描整个表格以找到所有表格, 一次性加入这些是这个查询耗时过长的根本原因。

    为了解决这个问题,对于每个要连接的表, 向时间相关字段添加条件 (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;
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 1970-01-01
      • 2011-05-29
      • 2021-10-04
      • 2016-10-18
      • 2015-07-28
      • 2021-05-05
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多