2a205e561a
* Problem: traceTransaction fails for succesful tx Solution: - Change the context to the begining of the block, rather than the end of it, while override block context to correct one pass predecessors pass current block information to grpc query * changelog * fix build * fix lint * refactor traceBlock * update protobuf * fix Predecessors * traceBlock refactor * refactor traceBlock response * Update proto/ethermint/evm/v1/tx.proto Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update proto/ethermint/evm/v1/query.proto Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update proto/ethermint/evm/v1/query.proto Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update proto/ethermint/evm/v1/query.proto Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update proto/ethermint/evm/v1/query.proto Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update proto/ethermint/evm/v1/query.proto Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * check tx index is not out of bound * fix build * Update rpc/ethereum/namespaces/debug/api.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/namespaces/debug/api.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/namespaces/debug/api.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/namespaces/debug/api.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * remove prealloc * add traceBlock test * Update x/evm/keeper/grpc_query.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * use bytes2Hex * fix error message * add comment * Apply suggestions from code review Co-authored-by: Freddy Caceres <freddy.caceres@crypto.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
273 lines
8.9 KiB
Protocol Buffer
273 lines
8.9 KiB
Protocol Buffer
syntax = "proto3";
|
|
package ethermint.evm.v1;
|
|
|
|
import "gogoproto/gogo.proto";
|
|
import "cosmos/base/query/v1beta1/pagination.proto";
|
|
import "google/api/annotations.proto";
|
|
import "ethermint/evm/v1/evm.proto";
|
|
import "ethermint/evm/v1/tx.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
option go_package = "github.com/tharsis/ethermint/x/evm/types";
|
|
|
|
// Query defines the gRPC querier service.
|
|
service Query {
|
|
// Account queries an Ethereum account.
|
|
rpc Account(QueryAccountRequest) returns (QueryAccountResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/account/{address}";
|
|
}
|
|
|
|
// CosmosAccount queries an Ethereum account's Cosmos Address.
|
|
rpc CosmosAccount(QueryCosmosAccountRequest)
|
|
returns (QueryCosmosAccountResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/cosmos_account/{address}";
|
|
}
|
|
|
|
// ValidatorAccount queries an Ethereum account's from a validator consensus
|
|
// Address.
|
|
rpc ValidatorAccount(QueryValidatorAccountRequest)
|
|
returns (QueryValidatorAccountResponse) {
|
|
option (google.api.http).get =
|
|
"/ethermint/evm/v1/validator_account/{cons_address}";
|
|
}
|
|
|
|
// Balance queries the balance of a the EVM denomination for a single
|
|
// EthAccount.
|
|
rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/balances/{address}";
|
|
}
|
|
|
|
// Storage queries the balance of all coins for a single account.
|
|
rpc Storage(QueryStorageRequest) returns (QueryStorageResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/storage/{address}/{key}";
|
|
}
|
|
|
|
// Code queries the balance of all coins for a single account.
|
|
rpc Code(QueryCodeRequest) returns (QueryCodeResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/codes/{address}";
|
|
}
|
|
|
|
// Params queries the parameters of x/evm module.
|
|
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/params";
|
|
}
|
|
|
|
// EthCall implements the `eth_call` rpc api
|
|
rpc EthCall(EthCallRequest) returns (MsgEthereumTxResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/eth_call";
|
|
}
|
|
|
|
// EstimateGas implements the `eth_estimateGas` rpc api
|
|
rpc EstimateGas(EthCallRequest) returns (EstimateGasResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/estimate_gas";
|
|
}
|
|
|
|
// TraceTx implements the `debug_traceTransaction` rpc api
|
|
rpc TraceTx(QueryTraceTxRequest) returns (QueryTraceTxResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/trace_tx";
|
|
}
|
|
|
|
// TraceBlock implements the `debug_traceBlockByNumber` and `debug_traceBlockByHash` rpc api
|
|
rpc TraceBlock(QueryTraceBlockRequest) returns (QueryTraceBlockResponse) {
|
|
option (google.api.http).get = "/ethermint/evm/v1/trace_block";
|
|
}
|
|
}
|
|
|
|
// QueryAccountRequest is the request type for the Query/Account RPC method.
|
|
message QueryAccountRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
// address is the ethereum hex address to query the account for.
|
|
string address = 1;
|
|
}
|
|
|
|
// QueryAccountResponse is the response type for the Query/Account RPC method.
|
|
message QueryAccountResponse {
|
|
// balance is the balance of the EVM denomination.
|
|
string balance = 1;
|
|
// code hash is the hex-formatted code bytes from the EOA.
|
|
string code_hash = 2;
|
|
// nonce is the account's sequence number.
|
|
uint64 nonce = 3;
|
|
}
|
|
|
|
// QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC
|
|
// method.
|
|
message QueryCosmosAccountRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
// address is the ethereum hex address to query the account for.
|
|
string address = 1;
|
|
}
|
|
|
|
// QueryCosmosAccountResponse is the response type for the Query/CosmosAccount
|
|
// RPC method.
|
|
message QueryCosmosAccountResponse {
|
|
// cosmos_address is the cosmos address of the account.
|
|
string cosmos_address = 1;
|
|
// sequence is the account's sequence number.
|
|
uint64 sequence = 2;
|
|
// account_number is the account numbert
|
|
uint64 account_number = 3;
|
|
}
|
|
|
|
// QueryValidatorAccountRequest is the request type for the
|
|
// Query/ValidatorAccount RPC method.
|
|
message QueryValidatorAccountRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
// cons_address is the validator cons address to query the account for.
|
|
string cons_address = 1;
|
|
}
|
|
|
|
// QueryValidatorAccountResponse is the response type for the
|
|
// Query/ValidatorAccount RPC method.
|
|
message QueryValidatorAccountResponse {
|
|
// account_address is the cosmos address of the account in bech32 format.
|
|
string account_address = 1;
|
|
// sequence is the account's sequence number.
|
|
uint64 sequence = 2;
|
|
// account_number is the account number
|
|
uint64 account_number = 3;
|
|
}
|
|
|
|
// QueryBalanceRequest is the request type for the Query/Balance RPC method.
|
|
message QueryBalanceRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
// address is the ethereum hex address to query the balance for.
|
|
string address = 1;
|
|
}
|
|
|
|
// QueryBalanceResponse is the response type for the Query/Balance RPC method.
|
|
message QueryBalanceResponse {
|
|
// balance is the balance of the EVM denomination.
|
|
string balance = 1;
|
|
}
|
|
|
|
// QueryStorageRequest is the request type for the Query/Storage RPC method.
|
|
message QueryStorageRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
/// address is the ethereum hex address to query the storage state for.
|
|
string address = 1;
|
|
|
|
// key defines the key of the storage state
|
|
string key = 2;
|
|
}
|
|
|
|
// QueryStorageResponse is the response type for the Query/Storage RPC
|
|
// method.
|
|
message QueryStorageResponse {
|
|
// key defines the storage state value hash associated with the given key.
|
|
string value = 1;
|
|
}
|
|
|
|
// QueryCodeRequest is the request type for the Query/Code RPC method.
|
|
message QueryCodeRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
// address is the ethereum hex address to query the code for.
|
|
string address = 1;
|
|
}
|
|
|
|
// QueryCodeResponse is the response type for the Query/Code RPC
|
|
// method.
|
|
message QueryCodeResponse {
|
|
// code represents the code bytes from an ethereum address.
|
|
bytes code = 1;
|
|
}
|
|
|
|
// QueryTxLogsRequest is the request type for the Query/TxLogs RPC method.
|
|
message QueryTxLogsRequest {
|
|
option (gogoproto.equal) = false;
|
|
option (gogoproto.goproto_getters) = false;
|
|
|
|
// hash is the ethereum transaction hex hash to query the logs for.
|
|
string hash = 1;
|
|
// pagination defines an optional pagination for the request.
|
|
cosmos.base.query.v1beta1.PageRequest pagination = 2;
|
|
}
|
|
|
|
// QueryTxLogs is the response type for the Query/TxLogs RPC method.
|
|
message QueryTxLogsResponse {
|
|
// logs represents the ethereum logs generated from the given transaction.
|
|
repeated Log logs = 1;
|
|
// pagination defines the pagination in the response.
|
|
cosmos.base.query.v1beta1.PageResponse pagination = 2;
|
|
}
|
|
|
|
// QueryParamsRequest defines the request type for querying x/evm parameters.
|
|
message QueryParamsRequest {}
|
|
|
|
// QueryParamsResponse defines the response type for querying x/evm parameters.
|
|
message QueryParamsResponse {
|
|
// params define the evm module parameters.
|
|
Params params = 1 [ (gogoproto.nullable) = false ];
|
|
}
|
|
|
|
// EthCallRequest defines EthCall request
|
|
message EthCallRequest {
|
|
// same json format as the json rpc api.
|
|
bytes args = 1;
|
|
// the default gas cap to be used
|
|
uint64 gas_cap = 2;
|
|
}
|
|
|
|
// EstimateGasResponse defines EstimateGas response
|
|
message EstimateGasResponse {
|
|
// the estimated gas
|
|
uint64 gas = 1;
|
|
}
|
|
|
|
// QueryTraceTxRequest defines TraceTx request
|
|
message QueryTraceTxRequest {
|
|
// msgEthereumTx for the requested transaction
|
|
MsgEthereumTx msg = 1;
|
|
// transaction index
|
|
uint64 tx_index = 2;
|
|
// TraceConfig holds extra parameters to trace functions.
|
|
TraceConfig trace_config = 3;
|
|
// the predecessor transactions included in the same block
|
|
// need to be replayed first to get correct context for tracing.
|
|
repeated MsgEthereumTx predecessors = 4;
|
|
// block number of requested transaction
|
|
int64 block_number = 5;
|
|
// block hex hash of requested transaction
|
|
string block_hash = 6;
|
|
// block time of requested transaction
|
|
google.protobuf.Timestamp block_time = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
|
}
|
|
|
|
// QueryTraceTxResponse defines TraceTx response
|
|
message QueryTraceTxResponse {
|
|
// response serialized in bytes
|
|
bytes data = 1;
|
|
}
|
|
|
|
// QueryTraceBlockRequest defines TraceTx request
|
|
message QueryTraceBlockRequest {
|
|
// txs messages in the block
|
|
repeated MsgEthereumTx txs = 1;
|
|
// TraceConfig holds extra parameters to trace functions.
|
|
TraceConfig trace_config = 3;
|
|
// block number
|
|
int64 block_number = 5;
|
|
// block hex hash
|
|
string block_hash = 6;
|
|
// block time
|
|
google.protobuf.Timestamp block_time = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
|
}
|
|
|
|
// QueryTraceBlockResponse defines TraceBlock response
|
|
message QueryTraceBlockResponse {
|
|
bytes data = 1;
|
|
}
|
|
|