如何计算 RSK 上单次稳定币转账所支付的 Gas 费?

Ale*_*hin 4 sql rsk

我正在尝试计算RSK上的 rUSDT 代币转账交易花费了多少天然气。如果我转到RSK explorer rUSDT 事件页面并选择带有转账事件的第一个可用交易,我会发现除了我感兴趣的转账事件之外,它还包括24 个其他事件(发送、转换、批准等)。因此,为此交易支付的 Gas 费(769,510 Gas * 0.000000000065540656 RBTC c)包含为所有这 24 个事件支付的 Gas 量。有没有办法将转账与其他转账“分开”,并计算仅为它们支付的汽油费?我的想法是使用共价数据库来查询 RSK 区块链。我编写此查询是为了计算最近 2​​0 笔具有转账事件的交易所支付的 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事件签名哈希)。

是否可以修改此查询以计算为代币传输单独支付的天然气?

bgu*_*uiz 5

您可以通过在子句中添加另一个条件,将查询限制为仅包含交易字段与torUSDT 代币的智能合约地址匹配的交易WHERE

AND t.to = E'\\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'
Run Code Online (Sandbox Code Playgroud)

解释:

  • 您最初的查询是获取外部拥有账户 (EOA) 地址与 ERC20 代币的智能合约 (SC) 地址之间的交易Transfer中的事件。
  • 您最初的查询还获取了其他SC 地址(例如 DeFi 协议)和 ERC20 代币的 SC 地址之间的内部交易Transfer中的事件
  • 从你的问题来看,你似乎只想选择前者,而排除后者。
  • 为此,一种方法是
    • 查看 EOA 在哪里将交易直接发送到 ERC20 代币的 SC --> 包含此内容
    • 查看 EOA 将交易发送到另一个 SC 地址的位置,该地址又间接在 ERC20 代币的 SC 上执行内部交易--> 排除此

上面应该给你一个结果,其中为该交易支付的汽油费确实是单次Transfer发生的。

然而,关于这一点:

有没有办法将转账与其他转账“分开”,并计算仅为它们支付的汽油费?

据我所知,没有直接的方法可以做到这一点。您可能可以使用 RPC 调用来完成此操作debug_traceTransaction...但是,由于这在您的数据库中不可用,因此您将需要一种基于 RPC 而不是 SQL 的全新方法。我将把这种替代方法留给其他回答者!


完整查询:

AND t.to = E'\\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'
Run Code Online (Sandbox Code Playgroud)