-
Notifications
You must be signed in to change notification settings - Fork 119
Description
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.
GetBlockByNumberGetBlockByHashGetBlockTransactionCountByHashGetBlockTransactionCountByNumberGetBlockTransactionCountRPCBlockFromCometBlock
/rpc/backend/tx_info.go:
These need to return Cosmos transactions translated into an EVM transaction.
GetTransactionByHashGetTransactionByHashPendingGetTransactionReceiptGetTransactionLogsGetTransactionByBlockHashAndIndexGetTransactionByBlockNumberAndIndexGetTxByEthHashGetTxByTxIndexGetTransactionByBlockAndIndex