我正在尝试计算RSK上的 rUSDT 代币转账交易花费了多少天然气。如果我转到RSK explorer rUSDT 事件页面并选择带有转账事件的第一个可用交易,我会发现除了我感兴趣的转账事件之外,它还包括24 个其他事件(发送、转换、批准等)。因此,为此交易支付的 Gas 费(769,510 Gas * 0.000000000065540656 RBTC c)包含为所有这 24 个事件支付的 Gas 量。有没有办法将转账与其他转账“分开”,并计算仅为它们支付的汽油费?我的想法是使用共价数据库来查询 RSK 区块链。我编写此查询是为了计算最近 20 笔具有转账事件的交易所支付的 Gas 费用。
SELECT encode(t.hash, 'hex'), t.gas_spent * t.gas_price / 10^18 AS gas_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[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 20
Run Code Online (Sandbox Code Playgroud)
其中0xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96是 rUSDT 代币地址,0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef是常量(ERC20Transfer事件签名哈希)。
是否可以修改此查询以计算为代币传输单独支付的天然气?
您可以通过在子句中添加另一个条件,将查询限制为仅包含交易字段与torUSDT 代币的智能合约地址匹配的交易WHERE:
AND t.to = E'\\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'
Run Code Online (Sandbox Code Playgroud)
解释:
Transfer中的事件。Transfer中的事件上面应该给你一个结果,其中为该交易支付的汽油费确实是单次Transfer发生的。
然而,关于这一点:
有没有办法将转账与其他转账“分开”,并计算仅为它们支付的汽油费?
据我所知,没有直接的方法可以做到这一点。您可能可以使用 RPC 调用来完成此操作debug_traceTransaction...但是,由于这在您的数据库中不可用,因此您将需要一种基于 RPC 而不是 SQL 的全新方法。我将把这种替代方法留给其他回答者!
完整查询:
AND t.to = E'\\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'
Run Code Online (Sandbox Code Playgroud)