Skip to content

EVM RPC Observability of Cosmos Transactions #482

@vladjdk

Description

@vladjdk

Currently, when transactions happen on the Cosmos side, they are not visible on the EVM side. Critically, a Cosmos transaction that changes balances will not be reflected as a change in the EVM. This affects indexers, block explorers, and queries in general. This has the effect of balances changing silently, making it harder to debug what happened from a pure EVM perspective without also integrating Cosmos infrastructure.

Requirements:

  • A general solution to this problem would be ideal. Any time there is a state change on the Cosmos layer that affects balances, there should be a translation made on the EVM layer.
  • For any transactions that have corresponding default precompiles (i.e. Staking, Governance, ERC20, etc.), we need to extract the messages and include the same events in the transaction.
    • If there are balance changes that do not have a corresponding ERC20, they may be skipped.
  • Since Cosmos transactions can contain many messages, and the EVM does not have such a concept, the solution needs to aggregate multiple messages into a single transaction result, which would include the total balance changes and all of the events that occurred in the transaction.
  • The solution must work with indexers and block explorers, confirmed by the existence of these transactions in their results and a lack of errors.

Non-Requirements:

  • The solution should not include tracing, as we cannot use the EVM to trace Cosmos transactions.

A current, potentially non-exhaustive list of RPC endpoints and functions that would need to be changed to observe Cosmos transactions:

/rpc/backend/blocks.go
These need to include the Cosmos transactions alongside the EVM transactions, complete with proper indexes.

  • GetBlockByNumber
  • GetBlockByHash
  • GetBlockTransactionCountByHash
  • GetBlockTransactionCountByNumber
  • GetBlockTransactionCount
  • RPCBlockFromCometBlock

/rpc/backend/tx_info.go:
These need to return Cosmos transactions translated into an EVM transaction.

  • GetTransactionByHash
  • GetTransactionByHashPending
  • GetTransactionReceipt
  • GetTransactionLogs
  • GetTransactionByBlockHashAndIndex
  • GetTransactionByBlockNumberAndIndex
  • GetTxByEthHash
  • GetTxByTxIndex
  • GetTransactionByBlockAndIndex

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions