rpc, evm: debug_traceTransaction endpoint (#506)

* fix typo

* Added tracers package to debug API

* Add GetTransactionByHash function to backend package

* first version

* traceTransaction first version

* clean PR

* revert debug changes

* Update proto/ethermint/evm/v1/query.proto

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>

* remove unnecesary panic

* remove internal debug api

* trace transaction javascript tracer

* add support for custom logConfig

* added comment

* traceTransactions tests

* fix linter

* remove unused

* add comments to traceConfig

* update dependencies

* updated endpoints md

* Apply suggestions from code review

* Update x/evm/keeper/grpc_query.go

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>

* Update x/evm/keeper/grpc_query.go

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
This commit is contained in:
crypto-facs
2021-09-04 20:33:06 +00:00
committed by GitHub
co-authored by Federico Kunze Küllmer
parent 6794daf014
commit c7554e96aa
22 changed files with 2198 additions and 285 deletions
+120
View File
@@ -5,6 +5,10 @@ import (
"encoding/json"
"errors"
"fmt"
"math/big"
"time"
"github.com/ethereum/go-ethereum/eth/tracers"
"github.com/palantir/stacktrace"
"google.golang.org/grpc/codes"
@@ -28,6 +32,10 @@ import (
var _ types.QueryServer = Keeper{}
const (
defaultTraceTimeout = 5 * time.Second
)
// Account implements the Query/Account gRPC method
func (k Keeper) Account(c context.Context, req *types.QueryAccountRequest) (*types.QueryAccountResponse, error) {
if req == nil {
@@ -449,3 +457,115 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
}
return &types.EstimateGasResponse{Gas: hi}, nil
}
// TraceTx configures a new tracer according to the provided configuration, and
// executes the given message in the provided environment. The return value will
// be tracer dependent.
func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*types.QueryTraceTxResponse, error) {
// Assemble the structured logger or the JavaScript tracer
var (
tracer vm.Tracer
err error
resultData []byte
)
ctx := sdk.UnwrapSDKContext(c)
k.WithContext(ctx)
params := k.GetParams(ctx)
coinbase, err := k.GetCoinbaseAddress(ctx)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight()))
coreMessage, err := req.Msg.AsMessage(signer)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
switch {
case req.TraceConfig != nil && req.TraceConfig.Tracer != "":
timeout := defaultTraceTimeout
//TODO change timeout to time.duration
//Used string to comply with go ethereum
if req.TraceConfig.Timeout != "" {
if timeout, err = time.ParseDuration(req.TraceConfig.Timeout); err != nil {
return nil, status.Errorf(codes.InvalidArgument, "timeout value: %s", err.Error())
}
}
txContext := core.NewEVMTxContext(coreMessage)
// Constuct the JavaScript tracer to execute with
if tracer, err = tracers.New(req.TraceConfig.Tracer, txContext); err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
// Handle timeouts and RPC cancellations
deadlineCtx, cancel := context.WithTimeout(c, timeout)
go func() {
<-deadlineCtx.Done()
if deadlineCtx.Err() == context.DeadlineExceeded {
tracer.(*tracers.Tracer).Stop(errors.New("execution timeout"))
}
}()
defer cancel()
case req.TraceConfig != nil && req.TraceConfig.LogConfig != nil:
logConfig := vm.LogConfig{
DisableMemory: req.TraceConfig.LogConfig.DisableMemory,
Debug: req.TraceConfig.LogConfig.Debug,
DisableStorage: req.TraceConfig.LogConfig.DisableStorage,
DisableStack: req.TraceConfig.LogConfig.DisableStack,
}
tracer = vm.NewStructLogger(&logConfig)
default:
tracer = types.NewTracer(types.TracerStruct, coreMessage, ethCfg, ctx.BlockHeight(), true)
}
evm := k.NewEVM(coreMessage, ethCfg, params, coinbase, tracer)
k.SetTxHashTransient(common.HexToHash(req.Msg.Hash))
k.SetTxIndexTransient(uint64(req.TxIndex))
res, err := k.ApplyMessage(evm, coreMessage, ethCfg, true)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
// Depending on the tracer type, format and return the trace result data.
switch tracer := tracer.(type) {
case *vm.StructLogger:
//TODO Return proper returnValue
result := types.ExecutionResult{
Gas: res.GasUsed,
Failed: res.Failed(),
ReturnValue: "",
StructLogs: types.FormatLogs(tracer.StructLogs()),
}
resultData, err = json.Marshal(result)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
case *tracers.Tracer:
result, err := tracer.GetResult()
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
resultData, err = json.Marshal(result)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
default:
return nil, status.Error(codes.InvalidArgument, "invalid tracer type")
}
return &types.QueryTraceTxResponse{
Data: resultData,
}, nil
}
+62
View File
@@ -758,3 +758,65 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
})
}
}
func (suite *KeeperTestSuite) TestTraceTx() {
ctx := sdk.WrapSDKContext(suite.ctx)
//TODO deploy contract that triggers internal transactions
var (
txMsg *types.MsgEthereumTx
traceConfig *types.TraceConfig
)
testCases := []struct {
msg string
malleate func()
expPass bool
traceResponse []byte
}{
{
msg: "default trace",
malleate: func() {
traceConfig = nil
},
expPass: true,
traceResponse: []byte{0x7b, 0x22, 0x67, 0x61, 0x73, 0x22, 0x3a, 0x33, 0x34, 0x38, 0x32, 0x38, 0x2c, 0x22, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x22, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d},
}, {
msg: "javascript tracer",
malleate: func() {
traceConfig = &types.TraceConfig{
Tracer: "{data: [], fault: function(log) {}, step: function(log) { if(log.op.toString() == \"CALL\") this.data.push(log.stack.peek(0)); }, result: function() { return this.data; }}",
}
},
expPass: true,
traceResponse: []byte{0x5b, 0x5d},
},
}
for _, tc := range testCases {
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
suite.SetupTest()
//Deploy contract
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
suite.Commit()
//Generate token transfer transaction
txMsg = suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
suite.Commit()
tc.malleate()
traceReq := types.QueryTraceTxRequest{
Msg: txMsg,
TraceConfig: traceConfig,
TxIndex: 1, // Can be hardcoded as this will be the only tx included in the block
}
res, err := suite.queryClient.TraceTx(ctx, &traceReq)
if tc.expPass {
suite.Require().NoError(err)
suite.Require().Equal(tc.traceResponse, res.Data)
} else {
suite.Require().Error(err)
}
})
}
}
+7 -2
View File
@@ -200,6 +200,12 @@ func (k Keeper) SetTxHashTransient(hash common.Hash) {
store.Set(types.KeyPrefixTransientTxHash, hash.Bytes())
}
// SetTxIndexTransient set the index of processing transaction
func (k Keeper) SetTxIndexTransient(index uint64) {
store := k.Ctx().TransientStore(k.transientKey)
store.Set(types.KeyPrefixTransientTxIndex, sdk.Uint64ToBigEndian(index))
}
// GetTxIndexTransient returns EVM transaction index on the current block.
func (k Keeper) GetTxIndexTransient() uint64 {
store := k.Ctx().TransientStore(k.transientKey)
@@ -215,8 +221,7 @@ func (k Keeper) GetTxIndexTransient() uint64 {
// value by one and then sets the new index back to the transient store.
func (k Keeper) IncreaseTxIndexTransient() {
txIndex := k.GetTxIndexTransient()
store := k.Ctx().TransientStore(k.transientKey)
store.Set(types.KeyPrefixTransientTxIndex, sdk.Uint64ToBigEndian(txIndex+1))
k.SetTxIndexTransient(txIndex + 1)
}
// ResetRefundTransient resets the available refund amount to 0
+34
View File
@@ -215,6 +215,40 @@ func (suite *KeeperTestSuite) DeployTestContract(t require.TestingT, owner commo
return crypto.CreateAddress(suite.address, nonce)
}
func (suite *KeeperTestSuite) TransferERC20Token(t require.TestingT, contractAddr common.Address, from common.Address, to common.Address, amount *big.Int) *types.MsgEthereumTx {
ctx := sdk.WrapSDKContext(suite.ctx)
chainID := suite.app.EvmKeeper.ChainID()
transferData, err := ContractABI.Pack("transfer", to, amount)
require.NoError(t, err)
args, err := json.Marshal(&types.CallArgs{To: &contractAddr, From: &from, Data: (*hexutil.Bytes)(&transferData)})
require.NoError(t, err)
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
Args: args,
GasCap: 25_000_000,
})
require.NoError(t, err)
nonce := suite.app.EvmKeeper.GetNonce(suite.address)
ercTransferTx := types.NewTx(
chainID,
nonce,
&contractAddr,
nil,
res.Gas,
nil,
transferData,
nil,
)
ercTransferTx.From = suite.address.Hex()
err = ercTransferTx.Sign(ethtypes.LatestSignerForChainID(chainID), suite.signer)
require.NoError(t, err)
rsp, err := suite.app.EvmKeeper.EthereumTx(ctx, ercTransferTx)
require.NoError(t, err)
require.Empty(t, rsp.VmError)
return ercTransferTx
}
func TestKeeperTestSuite(t *testing.T) {
suite.Run(t, new(KeeperTestSuite))
}
+840 -80
View File
@@ -512,6 +512,179 @@ func (m *AccessTuple) XXX_DiscardUnknown() {
var xxx_messageInfo_AccessTuple proto.InternalMessageInfo
// TraceConfig holds extra parameters to trace functions.
type TraceConfig struct {
// custom javascript tracer
Tracer string `protobuf:"bytes,1,opt,name=tracer,proto3" json:"tracer,omitempty"`
// overrides the default timeout of 5 seconds for JavaScript-based tracing calls
Timeout string `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"`
// number of blocks the tracer is willing to go back
Reexec uint64 `protobuf:"varint,3,opt,name=reexec,proto3" json:"reexec,omitempty"`
// configuration options for structured logger the EVM
LogConfig *LogConfig `protobuf:"bytes,4,opt,name=log_config,json=logConfig,proto3" json:"logConfig"`
}
func (m *TraceConfig) Reset() { *m = TraceConfig{} }
func (m *TraceConfig) String() string { return proto.CompactTextString(m) }
func (*TraceConfig) ProtoMessage() {}
func (*TraceConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_d21ecc92c8c8583e, []int{7}
}
func (m *TraceConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *TraceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_TraceConfig.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *TraceConfig) XXX_Merge(src proto.Message) {
xxx_messageInfo_TraceConfig.Merge(m, src)
}
func (m *TraceConfig) XXX_Size() int {
return m.Size()
}
func (m *TraceConfig) XXX_DiscardUnknown() {
xxx_messageInfo_TraceConfig.DiscardUnknown(m)
}
var xxx_messageInfo_TraceConfig proto.InternalMessageInfo
func (m *TraceConfig) GetTracer() string {
if m != nil {
return m.Tracer
}
return ""
}
func (m *TraceConfig) GetTimeout() string {
if m != nil {
return m.Timeout
}
return ""
}
func (m *TraceConfig) GetReexec() uint64 {
if m != nil {
return m.Reexec
}
return 0
}
func (m *TraceConfig) GetLogConfig() *LogConfig {
if m != nil {
return m.LogConfig
}
return nil
}
// LogConfig are the configuration options for structured logger the EVM
type LogConfig struct {
// disable memory capture
DisableMemory bool `protobuf:"varint,1,opt,name=disable_memory,json=disableMemory,proto3" json:"disableMemory"`
// disable stack capture
DisableStack bool `protobuf:"varint,2,opt,name=disable_stack,json=disableStack,proto3" json:"disableStack"`
// disable storage capture
DisableStorage bool `protobuf:"varint,3,opt,name=disable_storage,json=disableStorage,proto3" json:"disableStorage"`
// disable return data capture
DisableReturnData bool `protobuf:"varint,4,opt,name=disable_return_data,json=disableReturnData,proto3" json:"disableReturnData"`
// print output during capture end
Debug bool `protobuf:"varint,5,opt,name=debug,proto3" json:"debug,omitempty"`
// maximum length of output, but zero means unlimited
Limit int32 `protobuf:"varint,6,opt,name=limit,proto3" json:"limit,omitempty"`
// Chain overrides, can be used to execute a trace using future fork rules
Overrides *ChainConfig `protobuf:"bytes,7,opt,name=overrides,proto3" json:"overrides,omitempty"`
}
func (m *LogConfig) Reset() { *m = LogConfig{} }
func (m *LogConfig) String() string { return proto.CompactTextString(m) }
func (*LogConfig) ProtoMessage() {}
func (*LogConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_d21ecc92c8c8583e, []int{8}
}
func (m *LogConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *LogConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_LogConfig.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *LogConfig) XXX_Merge(src proto.Message) {
xxx_messageInfo_LogConfig.Merge(m, src)
}
func (m *LogConfig) XXX_Size() int {
return m.Size()
}
func (m *LogConfig) XXX_DiscardUnknown() {
xxx_messageInfo_LogConfig.DiscardUnknown(m)
}
var xxx_messageInfo_LogConfig proto.InternalMessageInfo
func (m *LogConfig) GetDisableMemory() bool {
if m != nil {
return m.DisableMemory
}
return false
}
func (m *LogConfig) GetDisableStack() bool {
if m != nil {
return m.DisableStack
}
return false
}
func (m *LogConfig) GetDisableStorage() bool {
if m != nil {
return m.DisableStorage
}
return false
}
func (m *LogConfig) GetDisableReturnData() bool {
if m != nil {
return m.DisableReturnData
}
return false
}
func (m *LogConfig) GetDebug() bool {
if m != nil {
return m.Debug
}
return false
}
func (m *LogConfig) GetLimit() int32 {
if m != nil {
return m.Limit
}
return 0
}
func (m *LogConfig) GetOverrides() *ChainConfig {
if m != nil {
return m.Overrides
}
return nil
}
func init() {
proto.RegisterType((*Params)(nil), "ethermint.evm.v1.Params")
proto.RegisterType((*ChainConfig)(nil), "ethermint.evm.v1.ChainConfig")
@@ -520,91 +693,105 @@ func init() {
proto.RegisterType((*Log)(nil), "ethermint.evm.v1.Log")
proto.RegisterType((*TxResult)(nil), "ethermint.evm.v1.TxResult")
proto.RegisterType((*AccessTuple)(nil), "ethermint.evm.v1.AccessTuple")
proto.RegisterType((*TraceConfig)(nil), "ethermint.evm.v1.TraceConfig")
proto.RegisterType((*LogConfig)(nil), "ethermint.evm.v1.LogConfig")
}
func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) }
var fileDescriptor_d21ecc92c8c8583e = []byte{
// 1249 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x96, 0x4f, 0x6f, 0xdb, 0xb6,
0x1b, 0xc7, 0xe3, 0xd8, 0x49, 0x64, 0x4a, 0xb6, 0x55, 0xd6, 0xcd, 0xcf, 0x6d, 0xf1, 0x8b, 0x32,
0x1e, 0x06, 0x0f, 0x68, 0xe3, 0x26, 0x45, 0xb0, 0xa2, 0xc0, 0x0e, 0x71, 0x9a, 0x76, 0xe9, 0x8a,
0x2d, 0x60, 0x3b, 0x0c, 0x18, 0x30, 0x08, 0xb4, 0xc4, 0xca, 0x5a, 0x24, 0xd1, 0x10, 0x69, 0xcf,
0x1e, 0xf6, 0x02, 0x06, 0xec, 0xb2, 0xe3, 0x0e, 0x3b, 0xec, 0xe5, 0x14, 0x3b, 0xf5, 0x38, 0x6c,
0x80, 0x30, 0xb8, 0xb7, 0x1c, 0xfd, 0x0a, 0x06, 0x91, 0xf4, 0xdf, 0x14, 0xc3, 0x92, 0x93, 0xf8,
0x3c, 0x7c, 0xf8, 0xfd, 0x90, 0x0f, 0x1f, 0x91, 0x04, 0x77, 0xa8, 0xe8, 0xd2, 0x34, 0x0e, 0x13,
0xd1, 0xa2, 0x83, 0xb8, 0x35, 0xd8, 0xcf, 0x3f, 0x7b, 0xbd, 0x94, 0x09, 0x06, 0xed, 0x59, 0xdf,
0x5e, 0xee, 0x1c, 0xec, 0xdf, 0xa9, 0x07, 0x2c, 0x60, 0xb2, 0xb3, 0x95, 0xb7, 0x54, 0x1c, 0xfa,
0x6b, 0x1d, 0x6c, 0x9e, 0x91, 0x94, 0xc4, 0x1c, 0xee, 0x83, 0x32, 0x1d, 0xc4, 0xae, 0x4f, 0x13,
0x16, 0x37, 0x0a, 0xbb, 0x85, 0x66, 0xb9, 0x5d, 0x9f, 0x64, 0x8e, 0x3d, 0x22, 0x71, 0xf4, 0x18,
0xcd, 0xba, 0x10, 0x36, 0xe8, 0x20, 0x7e, 0x92, 0x37, 0xe1, 0x27, 0xa0, 0x42, 0x13, 0xd2, 0x89,
0xa8, 0xeb, 0xa5, 0x94, 0x08, 0xda, 0x58, 0xdf, 0x2d, 0x34, 0x8d, 0x76, 0x63, 0x92, 0x39, 0x75,
0x3d, 0x6c, 0xb1, 0x1b, 0x61, 0x4b, 0xd9, 0xc7, 0xd2, 0x84, 0x1f, 0x03, 0x73, 0xda, 0x4f, 0xa2,
0xa8, 0x51, 0x94, 0x83, 0xb7, 0x27, 0x99, 0x03, 0x97, 0x07, 0x93, 0x28, 0x42, 0x18, 0xe8, 0xa1,
0x24, 0x8a, 0xe0, 0x11, 0x00, 0x74, 0x28, 0x52, 0xe2, 0xd2, 0xb0, 0xc7, 0x1b, 0xa5, 0xdd, 0x62,
0xb3, 0xd8, 0x46, 0xe3, 0xcc, 0x29, 0x9f, 0xe4, 0xde, 0x93, 0xd3, 0x33, 0x3e, 0xc9, 0x9c, 0x1b,
0x5a, 0x64, 0x16, 0x88, 0x70, 0x59, 0x1a, 0x27, 0x61, 0x8f, 0xc3, 0x6f, 0x80, 0xe5, 0x75, 0x49,
0x98, 0xb8, 0x1e, 0x4b, 0x5e, 0x87, 0x41, 0x63, 0x63, 0xb7, 0xd0, 0x34, 0x0f, 0xfe, 0xbf, 0xb7,
0x9a, 0xb7, 0xbd, 0xe3, 0x3c, 0xea, 0x58, 0x06, 0xb5, 0xef, 0xbe, 0xc9, 0x9c, 0xb5, 0x49, 0xe6,
0xdc, 0x54, 0xd2, 0x8b, 0x02, 0x08, 0x9b, 0xde, 0x3c, 0xf2, 0x71, 0xe9, 0x97, 0xdf, 0x9c, 0x35,
0xf4, 0x6b, 0x05, 0x98, 0x0b, 0xe3, 0x61, 0x0c, 0x6a, 0x5d, 0x16, 0x53, 0x2e, 0x28, 0xf1, 0xdd,
0x4e, 0xc4, 0xbc, 0x73, 0x9d, 0xe8, 0x27, 0x7f, 0x66, 0xce, 0x87, 0x41, 0x28, 0xba, 0xfd, 0xce,
0x9e, 0xc7, 0xe2, 0x96, 0xc7, 0x78, 0xcc, 0xb8, 0xfe, 0xdc, 0xe7, 0xfe, 0x79, 0x4b, 0x8c, 0x7a,
0x94, 0xef, 0x9d, 0x26, 0x62, 0x92, 0x39, 0xdb, 0x0a, 0xbf, 0x22, 0x85, 0x70, 0x75, 0xe6, 0x69,
0xe7, 0x0e, 0x38, 0x02, 0x55, 0x9f, 0x30, 0xf7, 0x35, 0x4b, 0xcf, 0x35, 0x6d, 0x5d, 0xd2, 0x5e,
0xfe, 0x77, 0xda, 0x38, 0x73, 0xac, 0x27, 0x47, 0x5f, 0x3c, 0x65, 0xe9, 0xb9, 0xd4, 0x9c, 0x64,
0xce, 0x2d, 0x45, 0x5f, 0x56, 0x46, 0xd8, 0xf2, 0x09, 0x9b, 0x85, 0xc1, 0xaf, 0x80, 0x3d, 0x0b,
0xe0, 0xfd, 0x5e, 0x8f, 0xa5, 0x42, 0xef, 0xef, 0xfd, 0x71, 0xe6, 0x54, 0xb5, 0xe4, 0x4b, 0xd5,
0x33, 0xc9, 0x9c, 0xff, 0xad, 0x88, 0xea, 0x31, 0x08, 0x57, 0xb5, 0xac, 0x0e, 0x85, 0x1c, 0x58,
0x34, 0xec, 0xed, 0x1f, 0x3e, 0xd0, 0x2b, 0x2a, 0xc9, 0x15, 0x9d, 0x5d, 0x69, 0x45, 0xe6, 0xc9,
0xe9, 0xd9, 0xfe, 0xe1, 0x83, 0xe9, 0x82, 0xf4, 0x6e, 0x2e, 0xca, 0x22, 0x6c, 0x2a, 0x53, 0xad,
0xe6, 0x14, 0x68, 0xd3, 0xed, 0x12, 0xde, 0x95, 0xb5, 0x52, 0x6e, 0x37, 0xc7, 0x99, 0x03, 0x94,
0xd2, 0xa7, 0x84, 0x77, 0xe7, 0xfb, 0xd2, 0x19, 0x7d, 0x4f, 0x12, 0x11, 0xf6, 0xe3, 0xa9, 0x16,
0x50, 0x83, 0xf3, 0xa8, 0xd9, 0xfc, 0x0f, 0xf5, 0xfc, 0x37, 0xaf, 0x3d, 0xff, 0xc3, 0xf7, 0xcd,
0xff, 0x70, 0x79, 0xfe, 0x2a, 0x66, 0x06, 0x7d, 0xa4, 0xa1, 0x5b, 0xd7, 0x86, 0x3e, 0x7a, 0x1f,
0xf4, 0xd1, 0x32, 0x54, 0xc5, 0xe4, 0xc5, 0xbe, 0x92, 0x89, 0x86, 0x71, 0xfd, 0x62, 0xbf, 0x94,
0xd4, 0xea, 0xcc, 0xa3, 0x70, 0x3f, 0x80, 0xba, 0xc7, 0x12, 0x2e, 0x72, 0x5f, 0xc2, 0x7a, 0x11,
0xd5, 0xcc, 0xb2, 0x64, 0x9e, 0x5e, 0x89, 0x79, 0x57, 0xff, 0xdf, 0xef, 0xd1, 0x43, 0xf8, 0xe6,
0xb2, 0x5b, 0xd1, 0x7b, 0xc0, 0xee, 0x51, 0x41, 0x53, 0xde, 0xe9, 0xa7, 0x81, 0x26, 0x03, 0x49,
0x3e, 0xb9, 0x12, 0x59, 0xff, 0x07, 0xab, 0x5a, 0x08, 0xd7, 0xe6, 0x2e, 0x45, 0xfc, 0x16, 0x54,
0xc3, 0x7c, 0x1a, 0x9d, 0x7e, 0xa4, 0x79, 0xa6, 0xe4, 0x1d, 0x5f, 0x89, 0xa7, 0x7f, 0xe6, 0x65,
0x25, 0x84, 0x2b, 0x53, 0x87, 0x62, 0xf5, 0x01, 0x8c, 0xfb, 0x61, 0xea, 0x06, 0x11, 0xf1, 0x42,
0x9a, 0x6a, 0x9e, 0x25, 0x79, 0xcf, 0xae, 0xc4, 0xbb, 0xad, 0x78, 0x97, 0xd5, 0x10, 0xb6, 0x73,
0xe7, 0x33, 0xe5, 0x53, 0x58, 0x1f, 0x58, 0x1d, 0x9a, 0x46, 0x61, 0xa2, 0x81, 0x15, 0x09, 0x3c,
0xba, 0x12, 0x50, 0xd7, 0xe9, 0xa2, 0x0e, 0xc2, 0xa6, 0x32, 0x67, 0x89, 0xf4, 0x88, 0x20, 0xd1,
0x88, 0x0b, 0xcd, 0xb1, 0xaf, 0x9f, 0xc8, 0x65, 0x25, 0x84, 0x2b, 0x53, 0xc7, 0x6c, 0x45, 0x11,
0x4b, 0x7c, 0x36, 0x5d, 0xd1, 0x8d, 0xeb, 0xaf, 0x68, 0x51, 0x07, 0x61, 0x53, 0x99, 0x92, 0xf2,
0xbc, 0x64, 0x54, 0xed, 0xda, 0xf3, 0x92, 0x51, 0xb3, 0x6d, 0x5c, 0x19, 0xb1, 0x88, 0xb9, 0x83,
0x87, 0x2a, 0x10, 0x9b, 0xf4, 0x3b, 0xc2, 0xa7, 0xff, 0x50, 0x0b, 0x6c, 0xbc, 0x14, 0xf9, 0x45,
0x6c, 0x83, 0xe2, 0x39, 0x1d, 0xa9, 0xbb, 0x08, 0xe7, 0x4d, 0x58, 0x07, 0x1b, 0x03, 0x12, 0xf5,
0xd5, 0x8d, 0x5e, 0xc6, 0xca, 0x40, 0x67, 0xa0, 0xf6, 0x2a, 0x25, 0x09, 0x27, 0x9e, 0x08, 0x59,
0xf2, 0x82, 0x05, 0x1c, 0x42, 0x50, 0x92, 0x67, 0xa2, 0x1a, 0x2b, 0xdb, 0xf0, 0x23, 0x50, 0x8a,
0x58, 0xc0, 0x1b, 0xeb, 0xbb, 0xc5, 0xa6, 0x79, 0x70, 0xeb, 0xf2, 0x9d, 0xfa, 0x82, 0x05, 0x58,
0x86, 0xa0, 0xdf, 0xd7, 0x41, 0xf1, 0x05, 0x0b, 0x60, 0x03, 0x6c, 0x11, 0xdf, 0x4f, 0x29, 0xe7,
0x5a, 0x69, 0x6a, 0xc2, 0x6d, 0xb0, 0x29, 0x58, 0x2f, 0xf4, 0x94, 0x5c, 0x19, 0x6b, 0x2b, 0x07,
0xfb, 0x44, 0x10, 0x79, 0xab, 0x58, 0x58, 0xb6, 0xe1, 0x01, 0xb0, 0xe4, 0xca, 0xdc, 0xa4, 0x1f,
0x77, 0x68, 0x2a, 0x2f, 0x87, 0x52, 0xbb, 0x76, 0x91, 0x39, 0xa6, 0xf4, 0x7f, 0x2e, 0xdd, 0x78,
0xd1, 0x80, 0xf7, 0xc0, 0x96, 0x18, 0x2e, 0x9e, 0xeb, 0x37, 0x2f, 0x32, 0xa7, 0x26, 0xe6, 0xcb,
0xcc, 0x8f, 0x6d, 0xbc, 0x29, 0x86, 0xf2, 0xf8, 0x6e, 0x01, 0x43, 0x0c, 0xdd, 0x30, 0xf1, 0xe9,
0x50, 0x1e, 0xdd, 0xa5, 0x76, 0xfd, 0x22, 0x73, 0xec, 0x85, 0xf0, 0xd3, 0xbc, 0x0f, 0x6f, 0x89,
0xa1, 0x6c, 0xc0, 0x7b, 0x00, 0xa8, 0x29, 0x49, 0x82, 0x3a, 0x78, 0x2b, 0x17, 0x99, 0x53, 0x96,
0x5e, 0xa9, 0x3d, 0x6f, 0x42, 0x04, 0x36, 0x94, 0xb6, 0x21, 0xb5, 0xad, 0x8b, 0xcc, 0x31, 0x22,
0x16, 0x28, 0x4d, 0xd5, 0x95, 0xa7, 0x2a, 0xa5, 0x31, 0x1b, 0x50, 0x5f, 0x9e, 0x6d, 0x06, 0x9e,
0x9a, 0xe8, 0xa7, 0x75, 0x60, 0xbc, 0x1a, 0x62, 0xca, 0xfb, 0x91, 0x80, 0x4f, 0x81, 0xed, 0xb1,
0x44, 0xa4, 0xc4, 0x13, 0xee, 0x52, 0x6a, 0xdb, 0x77, 0xe7, 0xe7, 0xcc, 0x6a, 0x04, 0xc2, 0xb5,
0xa9, 0xeb, 0x48, 0xe7, 0xbf, 0x0e, 0x36, 0x3a, 0x11, 0x63, 0xb1, 0xac, 0x04, 0x0b, 0x2b, 0x03,
0x62, 0x99, 0x35, 0xb9, 0xcb, 0x45, 0xf9, 0x72, 0xfa, 0xe0, 0xf2, 0x2e, 0xaf, 0x94, 0x4a, 0x7b,
0x5b, 0xbf, 0x9e, 0xaa, 0x8a, 0xad, 0xc7, 0xa3, 0x3c, 0xb7, 0xb2, 0x94, 0x6c, 0x50, 0x4c, 0xa9,
0x90, 0x9b, 0x66, 0xe1, 0xbc, 0x09, 0xef, 0x00, 0x23, 0xa5, 0x03, 0x9a, 0x0a, 0xea, 0xcb, 0xcd,
0x31, 0xf0, 0xcc, 0x86, 0xb7, 0x81, 0x11, 0x10, 0xee, 0xf6, 0x39, 0xf5, 0xd5, 0x4e, 0xe0, 0xad,
0x80, 0xf0, 0x2f, 0x39, 0xf5, 0x1f, 0x97, 0x7e, 0xcc, 0x1f, 0x5f, 0x04, 0x98, 0x47, 0x9e, 0x47,
0x39, 0x7f, 0xd5, 0xef, 0x45, 0xf4, 0x5f, 0x2a, 0xec, 0x00, 0x58, 0x5c, 0xb0, 0x94, 0x04, 0xd4,
0x3d, 0xa7, 0x23, 0x5d, 0x67, 0xaa, 0x6a, 0xb4, 0xff, 0x33, 0x3a, 0xe2, 0x78, 0xd1, 0x50, 0x88,
0x76, 0xfb, 0xcd, 0x78, 0xa7, 0xf0, 0x76, 0xbc, 0x53, 0xf8, 0x7b, 0xbc, 0x53, 0xf8, 0xf9, 0xdd,
0xce, 0xda, 0xdb, 0x77, 0x3b, 0x6b, 0x7f, 0xbc, 0xdb, 0x59, 0xfb, 0xba, 0xb9, 0xf0, 0x3b, 0x8b,
0x2e, 0x49, 0x79, 0xc8, 0x5b, 0xf3, 0xe7, 0xfa, 0x50, 0x3e, 0xd8, 0xe5, 0x4f, 0xdd, 0xd9, 0x94,
0x0f, 0xf1, 0x87, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x5c, 0x6d, 0xc5, 0xce, 0x0b, 0x00,
0x00,
// 1455 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4d, 0x6f, 0x1b, 0x37,
0x1a, 0xb6, 0x2c, 0xd9, 0x1e, 0x51, 0x9f, 0xa6, 0x1d, 0xaf, 0x12, 0x63, 0x3d, 0xde, 0x39, 0x2c,
0xbc, 0x40, 0x62, 0xc5, 0x0e, 0x8c, 0x35, 0x12, 0xec, 0xc1, 0xb2, 0x9d, 0xac, 0xb3, 0xd9, 0x5d,
0x83, 0xf6, 0x62, 0x81, 0x02, 0xc5, 0x80, 0x9a, 0x61, 0x46, 0x53, 0xcf, 0x0c, 0x05, 0x92, 0xa3,
0x4a, 0x45, 0x7f, 0x40, 0x81, 0x5e, 0x7a, 0xec, 0xa1, 0x87, 0xa2, 0xbf, 0x26, 0xe8, 0x29, 0xc7,
0xa2, 0x05, 0x06, 0x85, 0x73, 0xaa, 0x8e, 0xfa, 0x05, 0xc5, 0x90, 0x1c, 0x7d, 0xd9, 0x68, 0x6b,
0x9f, 0xc4, 0xe7, 0xfd, 0x78, 0x1e, 0xf2, 0xe5, 0x4b, 0x0e, 0x05, 0x1e, 0x11, 0xd1, 0x21, 0x2c,
0xf4, 0x23, 0xd1, 0x24, 0xbd, 0xb0, 0xd9, 0xdb, 0x4b, 0x7f, 0x76, 0xbb, 0x8c, 0x0a, 0x0a, 0xeb,
0x63, 0xdf, 0x6e, 0x6a, 0xec, 0xed, 0x3d, 0x5a, 0xf7, 0xa8, 0x47, 0xa5, 0xb3, 0x99, 0x8e, 0x54,
0x9c, 0xf5, 0xd3, 0x22, 0x58, 0x3e, 0xc7, 0x0c, 0x87, 0x1c, 0xee, 0x81, 0x22, 0xe9, 0x85, 0xb6,
0x4b, 0x22, 0x1a, 0x36, 0x72, 0xdb, 0xb9, 0x9d, 0x62, 0x6b, 0x7d, 0x94, 0x98, 0xf5, 0x01, 0x0e,
0x83, 0xe7, 0xd6, 0xd8, 0x65, 0x21, 0x83, 0xf4, 0xc2, 0x93, 0x74, 0x08, 0xff, 0x01, 0x2a, 0x24,
0xc2, 0xed, 0x80, 0xd8, 0x0e, 0x23, 0x58, 0x90, 0xc6, 0xe2, 0x76, 0x6e, 0xc7, 0x68, 0x35, 0x46,
0x89, 0xb9, 0xae, 0xd3, 0xa6, 0xdd, 0x16, 0x2a, 0x2b, 0x7c, 0x2c, 0x21, 0xfc, 0x3b, 0x28, 0x65,
0x7e, 0x1c, 0x04, 0x8d, 0xbc, 0x4c, 0xde, 0x18, 0x25, 0x26, 0x9c, 0x4d, 0xc6, 0x41, 0x60, 0x21,
0xa0, 0x53, 0x71, 0x10, 0xc0, 0x23, 0x00, 0x48, 0x5f, 0x30, 0x6c, 0x13, 0xbf, 0xcb, 0x1b, 0x85,
0xed, 0xfc, 0x4e, 0xbe, 0x65, 0x5d, 0x27, 0x66, 0xf1, 0x34, 0xb5, 0x9e, 0x9e, 0x9d, 0xf3, 0x51,
0x62, 0xae, 0x6a, 0x92, 0x71, 0xa0, 0x85, 0x8a, 0x12, 0x9c, 0xfa, 0x5d, 0x0e, 0x3f, 0x06, 0x65,
0xa7, 0x83, 0xfd, 0xc8, 0x76, 0x68, 0xf4, 0xd6, 0xf7, 0x1a, 0x4b, 0xdb, 0xb9, 0x9d, 0xd2, 0xfe,
0x9f, 0x77, 0xe7, 0xeb, 0xb6, 0x7b, 0x9c, 0x46, 0x1d, 0xcb, 0xa0, 0xd6, 0xe6, 0xbb, 0xc4, 0x5c,
0x18, 0x25, 0xe6, 0x9a, 0xa2, 0x9e, 0x26, 0xb0, 0x50, 0xc9, 0x99, 0x44, 0x3e, 0x2f, 0x7c, 0xfd,
0xad, 0xb9, 0x60, 0x7d, 0x53, 0x01, 0xa5, 0xa9, 0x7c, 0x18, 0x82, 0x5a, 0x87, 0x86, 0x84, 0x0b,
0x82, 0x5d, 0xbb, 0x1d, 0x50, 0xe7, 0x4a, 0x17, 0xfa, 0xe4, 0xc7, 0xc4, 0xfc, 0xab, 0xe7, 0x8b,
0x4e, 0xdc, 0xde, 0x75, 0x68, 0xd8, 0x74, 0x28, 0x0f, 0x29, 0xd7, 0x3f, 0x4f, 0xb8, 0x7b, 0xd5,
0x14, 0x83, 0x2e, 0xe1, 0xbb, 0x67, 0x91, 0x18, 0x25, 0xe6, 0x86, 0x92, 0x9f, 0xa3, 0xb2, 0x50,
0x75, 0x6c, 0x69, 0xa5, 0x06, 0x38, 0x00, 0x55, 0x17, 0x53, 0xfb, 0x2d, 0x65, 0x57, 0x5a, 0x6d,
0x51, 0xaa, 0x5d, 0xfc, 0x71, 0xb5, 0xeb, 0xc4, 0x2c, 0x9f, 0x1c, 0xfd, 0xf7, 0x25, 0x65, 0x57,
0x92, 0x73, 0x94, 0x98, 0x0f, 0x94, 0xfa, 0x2c, 0xb3, 0x85, 0xca, 0x2e, 0xa6, 0xe3, 0x30, 0xf8,
0x7f, 0x50, 0x1f, 0x07, 0xf0, 0xb8, 0xdb, 0xa5, 0x4c, 0xe8, 0xfd, 0x7d, 0x72, 0x9d, 0x98, 0x55,
0x4d, 0x79, 0xa1, 0x3c, 0xa3, 0xc4, 0xfc, 0xd3, 0x1c, 0xa9, 0xce, 0xb1, 0x50, 0x55, 0xd3, 0xea,
0x50, 0xc8, 0x41, 0x99, 0xf8, 0xdd, 0xbd, 0x83, 0xa7, 0x7a, 0x45, 0x05, 0xb9, 0xa2, 0xf3, 0x3b,
0xad, 0xa8, 0x74, 0x7a, 0x76, 0xbe, 0x77, 0xf0, 0x34, 0x5b, 0x90, 0xde, 0xcd, 0x69, 0x5a, 0x0b,
0x95, 0x14, 0x54, 0xab, 0x39, 0x03, 0x1a, 0xda, 0x1d, 0xcc, 0x3b, 0xb2, 0x57, 0x8a, 0xad, 0x9d,
0xeb, 0xc4, 0x04, 0x8a, 0xe9, 0x9f, 0x98, 0x77, 0x26, 0xfb, 0xd2, 0x1e, 0x7c, 0x86, 0x23, 0xe1,
0xc7, 0x61, 0xc6, 0x05, 0x54, 0x72, 0x1a, 0x35, 0x9e, 0xff, 0x81, 0x9e, 0xff, 0xf2, 0xbd, 0xe7,
0x7f, 0x70, 0xdb, 0xfc, 0x0f, 0x66, 0xe7, 0xaf, 0x62, 0xc6, 0xa2, 0x87, 0x5a, 0x74, 0xe5, 0xde,
0xa2, 0x87, 0xb7, 0x89, 0x1e, 0xce, 0x8a, 0xaa, 0x98, 0xb4, 0xd9, 0xe7, 0x2a, 0xd1, 0x30, 0xee,
0xdf, 0xec, 0x37, 0x8a, 0x5a, 0x1d, 0x5b, 0x94, 0xdc, 0xe7, 0x60, 0xdd, 0xa1, 0x11, 0x17, 0xa9,
0x2d, 0xa2, 0xdd, 0x80, 0x68, 0xcd, 0xa2, 0xd4, 0x3c, 0xbb, 0x93, 0xe6, 0xa6, 0x3e, 0xdf, 0xb7,
0xf0, 0x59, 0x68, 0x6d, 0xd6, 0xac, 0xd4, 0xbb, 0xa0, 0xde, 0x25, 0x82, 0x30, 0xde, 0x8e, 0x99,
0xa7, 0x95, 0x81, 0x54, 0x3e, 0xbd, 0x93, 0xb2, 0x3e, 0x07, 0xf3, 0x5c, 0x16, 0xaa, 0x4d, 0x4c,
0x4a, 0xf1, 0x13, 0x50, 0xf5, 0xd3, 0x69, 0xb4, 0xe3, 0x40, 0xeb, 0x95, 0xa4, 0xde, 0xf1, 0x9d,
0xf4, 0xf4, 0x61, 0x9e, 0x65, 0xb2, 0x50, 0x25, 0x33, 0x28, 0xad, 0x18, 0xc0, 0x30, 0xf6, 0x99,
0xed, 0x05, 0xd8, 0xf1, 0x09, 0xd3, 0x7a, 0x65, 0xa9, 0xf7, 0xea, 0x4e, 0x7a, 0x0f, 0x95, 0xde,
0x4d, 0x36, 0x0b, 0xd5, 0x53, 0xe3, 0x2b, 0x65, 0x53, 0xb2, 0x2e, 0x28, 0xb7, 0x09, 0x0b, 0xfc,
0x48, 0x0b, 0x56, 0xa4, 0xe0, 0xd1, 0x9d, 0x04, 0x75, 0x9f, 0x4e, 0xf3, 0x58, 0xa8, 0xa4, 0xe0,
0xb8, 0x90, 0x0e, 0x16, 0x38, 0x18, 0x70, 0xa1, 0x75, 0xea, 0xf7, 0x2f, 0xe4, 0x2c, 0x93, 0x85,
0x2a, 0x99, 0x61, 0xbc, 0xa2, 0x80, 0x46, 0x2e, 0xcd, 0x56, 0xb4, 0x7a, 0xff, 0x15, 0x4d, 0xf3,
0x58, 0xa8, 0xa4, 0xa0, 0x54, 0x79, 0x5d, 0x30, 0xaa, 0xf5, 0xda, 0xeb, 0x82, 0x51, 0xab, 0xd7,
0x51, 0x65, 0x40, 0x03, 0x6a, 0xf7, 0x9e, 0xa9, 0x40, 0x54, 0x22, 0x9f, 0x62, 0x9e, 0x9d, 0xa1,
0x26, 0x58, 0xba, 0x10, 0xe9, 0x87, 0xb8, 0x0e, 0xf2, 0x57, 0x64, 0xa0, 0xbe, 0x45, 0x28, 0x1d,
0xc2, 0x75, 0xb0, 0xd4, 0xc3, 0x41, 0xac, 0xbe, 0xe8, 0x45, 0xa4, 0x80, 0x75, 0x0e, 0x6a, 0x97,
0x0c, 0x47, 0x1c, 0x3b, 0xc2, 0xa7, 0xd1, 0x1b, 0xea, 0x71, 0x08, 0x41, 0x41, 0xde, 0x89, 0x2a,
0x57, 0x8e, 0xe1, 0xdf, 0x40, 0x21, 0xa0, 0x1e, 0x6f, 0x2c, 0x6e, 0xe7, 0x77, 0x4a, 0xfb, 0x0f,
0x6e, 0x7e, 0x53, 0xdf, 0x50, 0x0f, 0xc9, 0x10, 0xeb, 0xfb, 0x45, 0x90, 0x7f, 0x43, 0x3d, 0xd8,
0x00, 0x2b, 0xd8, 0x75, 0x19, 0xe1, 0x5c, 0x33, 0x65, 0x10, 0x6e, 0x80, 0x65, 0x41, 0xbb, 0xbe,
0xa3, 0xe8, 0x8a, 0x48, 0xa3, 0x54, 0xd8, 0xc5, 0x02, 0xcb, 0xaf, 0x4a, 0x19, 0xc9, 0x31, 0xdc,
0x07, 0x65, 0xb9, 0x32, 0x3b, 0x8a, 0xc3, 0x36, 0x61, 0xf2, 0xe3, 0x50, 0x68, 0xd5, 0x86, 0x89,
0x59, 0x92, 0xf6, 0xff, 0x48, 0x33, 0x9a, 0x06, 0xf0, 0x31, 0x58, 0x11, 0xfd, 0xe9, 0x7b, 0x7d,
0x6d, 0x98, 0x98, 0x35, 0x31, 0x59, 0x66, 0x7a, 0x6d, 0xa3, 0x65, 0xd1, 0x97, 0xd7, 0x77, 0x13,
0x18, 0xa2, 0x6f, 0xfb, 0x91, 0x4b, 0xfa, 0xf2, 0xea, 0x2e, 0xb4, 0xd6, 0x87, 0x89, 0x59, 0x9f,
0x0a, 0x3f, 0x4b, 0x7d, 0x68, 0x45, 0xf4, 0xe5, 0x00, 0x3e, 0x06, 0x40, 0x4d, 0x49, 0x2a, 0xa8,
0x8b, 0xb7, 0x32, 0x4c, 0xcc, 0xa2, 0xb4, 0x4a, 0xee, 0xc9, 0x10, 0x5a, 0x60, 0x49, 0x71, 0x1b,
0x92, 0xbb, 0x3c, 0x4c, 0x4c, 0x23, 0xa0, 0x9e, 0xe2, 0x54, 0xae, 0xb4, 0x54, 0x8c, 0x84, 0xb4,
0x47, 0x5c, 0x79, 0xb7, 0x19, 0x28, 0x83, 0xd6, 0x97, 0x8b, 0xc0, 0xb8, 0xec, 0x23, 0xc2, 0xe3,
0x40, 0xc0, 0x97, 0xa0, 0xee, 0xd0, 0x48, 0x30, 0xec, 0x08, 0x7b, 0xa6, 0xb4, 0xad, 0xcd, 0xc9,
0x3d, 0x33, 0x1f, 0x61, 0xa1, 0x5a, 0x66, 0x3a, 0xd2, 0xf5, 0x5f, 0x07, 0x4b, 0xed, 0x80, 0xd2,
0x50, 0x76, 0x42, 0x19, 0x29, 0x00, 0x91, 0xac, 0x9a, 0xdc, 0xe5, 0xbc, 0x7c, 0x39, 0xfd, 0xe5,
0xe6, 0x2e, 0xcf, 0xb5, 0x4a, 0x6b, 0x43, 0xbf, 0x9e, 0xaa, 0x4a, 0x5b, 0xe7, 0x5b, 0x69, 0x6d,
0x65, 0x2b, 0xd5, 0x41, 0x9e, 0x11, 0x21, 0x37, 0xad, 0x8c, 0xd2, 0x21, 0x7c, 0x04, 0x0c, 0x46,
0x7a, 0x84, 0x09, 0xe2, 0xca, 0xcd, 0x31, 0xd0, 0x18, 0xc3, 0x87, 0xc0, 0xf0, 0x30, 0xb7, 0x63,
0x4e, 0x5c, 0xb5, 0x13, 0x68, 0xc5, 0xc3, 0xfc, 0x7f, 0x9c, 0xb8, 0xcf, 0x0b, 0x5f, 0xa4, 0x8f,
0x2f, 0x0c, 0x4a, 0x47, 0x8e, 0x43, 0x38, 0xbf, 0x8c, 0xbb, 0x01, 0xf9, 0x8d, 0x0e, 0xdb, 0x07,
0x65, 0x2e, 0x28, 0xc3, 0x1e, 0xb1, 0xaf, 0xc8, 0x40, 0xf7, 0x99, 0xea, 0x1a, 0x6d, 0xff, 0x17,
0x19, 0x70, 0x34, 0x0d, 0xb4, 0xc4, 0x77, 0x39, 0x50, 0xba, 0x64, 0xd8, 0x21, 0xfa, 0x7d, 0x97,
0xf6, 0x6a, 0x0a, 0x99, 0x96, 0xd0, 0x28, 0xd5, 0x16, 0x7e, 0x48, 0x68, 0x2c, 0xf4, 0x79, 0xca,
0x60, 0x9a, 0xc1, 0x08, 0xe9, 0x13, 0x47, 0x96, 0xb1, 0x80, 0x34, 0x82, 0x67, 0x00, 0x04, 0xd4,
0xcb, 0x1e, 0xa7, 0x05, 0x59, 0xe2, 0xcd, 0x5b, 0x0f, 0x92, 0x7e, 0x9a, 0xca, 0x9e, 0x0a, 0x32,
0x88, 0x26, 0x43, 0xeb, 0x97, 0x45, 0x50, 0x1c, 0xc7, 0xc1, 0x43, 0x50, 0x75, 0x7d, 0x2e, 0xdf,
0xd5, 0x21, 0x09, 0x29, 0x53, 0xa7, 0xde, 0x68, 0xad, 0x0e, 0x13, 0xb3, 0xa2, 0x3d, 0xff, 0x96,
0x0e, 0x34, 0x0b, 0xe1, 0x01, 0xc8, 0x0c, 0x36, 0x17, 0x58, 0x3f, 0x26, 0x8d, 0x56, 0x7d, 0x98,
0x98, 0x65, 0xed, 0xb8, 0x48, 0xed, 0x68, 0x06, 0xc1, 0x17, 0xa0, 0x36, 0x49, 0x93, 0x05, 0xd4,
0x0f, 0x41, 0x38, 0x4c, 0xcc, 0xea, 0x38, 0x54, 0x7a, 0xd0, 0x1c, 0x86, 0xa7, 0x60, 0x2d, 0x4b,
0x66, 0x44, 0xc4, 0x2c, 0xb2, 0xe5, 0x99, 0x2f, 0x48, 0x82, 0x07, 0xc3, 0xc4, 0x5c, 0xd5, 0x6e,
0x24, 0xbd, 0x27, 0x58, 0x60, 0x74, 0xd3, 0x94, 0xf6, 0xb0, 0x4b, 0xda, 0xb1, 0xa7, 0x9b, 0x48,
0x81, 0xd4, 0x1a, 0xf8, 0xa1, 0x2f, 0x64, 0xfb, 0x2c, 0x21, 0x05, 0xe0, 0x0b, 0x50, 0xa4, 0x3d,
0xc2, 0x98, 0xef, 0x12, 0x2e, 0xcf, 0xeb, 0xef, 0xfd, 0x2b, 0x40, 0x93, 0xf8, 0x56, 0xeb, 0xdd,
0xf5, 0x56, 0xee, 0xfd, 0xf5, 0x56, 0xee, 0xe7, 0xeb, 0xad, 0xdc, 0x57, 0x1f, 0xb6, 0x16, 0xde,
0x7f, 0xd8, 0x5a, 0xf8, 0xe1, 0xc3, 0xd6, 0xc2, 0x47, 0x3b, 0x53, 0xf7, 0xbb, 0xe8, 0x60, 0xc6,
0x7d, 0xde, 0x9c, 0xfc, 0x7f, 0xeb, 0xcb, 0x7f, 0x70, 0xf2, 0x96, 0x6f, 0x2f, 0xcb, 0x7f, 0x66,
0xcf, 0x7e, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x36, 0x8e, 0x02, 0xc1, 0xdf, 0x0d, 0x00, 0x00,
}
func (m *Params) Marshal() (dAtA []byte, err error) {
@@ -1160,6 +1347,150 @@ func (m *AccessTuple) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *TraceConfig) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *TraceConfig) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *TraceConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.LogConfig != nil {
{
size, err := m.LogConfig.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintEvm(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x22
}
if m.Reexec != 0 {
i = encodeVarintEvm(dAtA, i, uint64(m.Reexec))
i--
dAtA[i] = 0x18
}
if len(m.Timeout) > 0 {
i -= len(m.Timeout)
copy(dAtA[i:], m.Timeout)
i = encodeVarintEvm(dAtA, i, uint64(len(m.Timeout)))
i--
dAtA[i] = 0x12
}
if len(m.Tracer) > 0 {
i -= len(m.Tracer)
copy(dAtA[i:], m.Tracer)
i = encodeVarintEvm(dAtA, i, uint64(len(m.Tracer)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *LogConfig) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *LogConfig) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *LogConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.Overrides != nil {
{
size, err := m.Overrides.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintEvm(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x3a
}
if m.Limit != 0 {
i = encodeVarintEvm(dAtA, i, uint64(m.Limit))
i--
dAtA[i] = 0x30
}
if m.Debug {
i--
if m.Debug {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x28
}
if m.DisableReturnData {
i--
if m.DisableReturnData {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x20
}
if m.DisableStorage {
i--
if m.DisableStorage {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x18
}
if m.DisableStack {
i--
if m.DisableStack {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x10
}
if m.DisableMemory {
i--
if m.DisableMemory {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x8
}
return len(dAtA) - i, nil
}
func encodeVarintEvm(dAtA []byte, offset int, v uint64) int {
offset -= sovEvm(v)
base := offset
@@ -1394,6 +1725,61 @@ func (m *AccessTuple) Size() (n int) {
return n
}
func (m *TraceConfig) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Tracer)
if l > 0 {
n += 1 + l + sovEvm(uint64(l))
}
l = len(m.Timeout)
if l > 0 {
n += 1 + l + sovEvm(uint64(l))
}
if m.Reexec != 0 {
n += 1 + sovEvm(uint64(m.Reexec))
}
if m.LogConfig != nil {
l = m.LogConfig.Size()
n += 1 + l + sovEvm(uint64(l))
}
return n
}
func (m *LogConfig) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.DisableMemory {
n += 2
}
if m.DisableStack {
n += 2
}
if m.DisableStorage {
n += 2
}
if m.DisableReturnData {
n += 2
}
if m.Debug {
n += 2
}
if m.Limit != 0 {
n += 1 + sovEvm(uint64(m.Limit))
}
if m.Overrides != nil {
l = m.Overrides.Size()
n += 1 + l + sovEvm(uint64(l))
}
return n
}
func sovEvm(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
}
@@ -3056,6 +3442,380 @@ func (m *AccessTuple) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *TraceConfig) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: TraceConfig: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: TraceConfig: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Tracer", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthEvm
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthEvm
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Tracer = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthEvm
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthEvm
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Timeout = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Reexec", wireType)
}
m.Reexec = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Reexec |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field LogConfig", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthEvm
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthEvm
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.LogConfig == nil {
m.LogConfig = &LogConfig{}
}
if err := m.LogConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipEvm(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthEvm
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *LogConfig) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: LogConfig: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: LogConfig: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field DisableMemory", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.DisableMemory = bool(v != 0)
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field DisableStack", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.DisableStack = bool(v != 0)
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field DisableStorage", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.DisableStorage = bool(v != 0)
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field DisableReturnData", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.DisableReturnData = bool(v != 0)
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Debug", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.Debug = bool(v != 0)
case 6:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType)
}
m.Limit = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Limit |= int32(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 7:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Overrides", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthEvm
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthEvm
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Overrides == nil {
m.Overrides = &ChainConfig{}
}
if err := m.Overrides.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipEvm(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthEvm
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipEvm(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
+10
View File
@@ -0,0 +1,10 @@
package types
import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
)
// UnpackInterfaces implements UnpackInterfacesMesssage.UnpackInterfaces
func (m QueryTraceTxRequest) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
return m.Msg.UnpackInterfaces(unpacker)
}
+576 -80
View File
@@ -1186,6 +1186,116 @@ func (m *EstimateGasResponse) GetGas() uint64 {
return 0
}
// QueryTraceTxRequest defines TraceTx request
type QueryTraceTxRequest struct {
// msgEthereumTx for the requested transaction
Msg *MsgEthereumTx `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
// transaction index
TxIndex uint32 `protobuf:"varint,2,opt,name=tx_index,json=txIndex,proto3" json:"tx_index,omitempty"`
// TraceConfig holds extra parameters to trace functions.
TraceConfig *TraceConfig `protobuf:"bytes,3,opt,name=trace_config,json=traceConfig,proto3" json:"trace_config,omitempty"`
}
func (m *QueryTraceTxRequest) Reset() { *m = QueryTraceTxRequest{} }
func (m *QueryTraceTxRequest) String() string { return proto.CompactTextString(m) }
func (*QueryTraceTxRequest) ProtoMessage() {}
func (*QueryTraceTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{25}
}
func (m *QueryTraceTxRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *QueryTraceTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_QueryTraceTxRequest.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *QueryTraceTxRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryTraceTxRequest.Merge(m, src)
}
func (m *QueryTraceTxRequest) XXX_Size() int {
return m.Size()
}
func (m *QueryTraceTxRequest) XXX_DiscardUnknown() {
xxx_messageInfo_QueryTraceTxRequest.DiscardUnknown(m)
}
var xxx_messageInfo_QueryTraceTxRequest proto.InternalMessageInfo
func (m *QueryTraceTxRequest) GetMsg() *MsgEthereumTx {
if m != nil {
return m.Msg
}
return nil
}
func (m *QueryTraceTxRequest) GetTxIndex() uint32 {
if m != nil {
return m.TxIndex
}
return 0
}
func (m *QueryTraceTxRequest) GetTraceConfig() *TraceConfig {
if m != nil {
return m.TraceConfig
}
return nil
}
// QueryTraceTxResponse defines TraceTx response
type QueryTraceTxResponse struct {
// response serialized in bytes
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
}
func (m *QueryTraceTxResponse) Reset() { *m = QueryTraceTxResponse{} }
func (m *QueryTraceTxResponse) String() string { return proto.CompactTextString(m) }
func (*QueryTraceTxResponse) ProtoMessage() {}
func (*QueryTraceTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{26}
}
func (m *QueryTraceTxResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *QueryTraceTxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_QueryTraceTxResponse.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *QueryTraceTxResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryTraceTxResponse.Merge(m, src)
}
func (m *QueryTraceTxResponse) XXX_Size() int {
return m.Size()
}
func (m *QueryTraceTxResponse) XXX_DiscardUnknown() {
xxx_messageInfo_QueryTraceTxResponse.DiscardUnknown(m)
}
var xxx_messageInfo_QueryTraceTxResponse proto.InternalMessageInfo
func (m *QueryTraceTxResponse) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
func init() {
proto.RegisterType((*QueryAccountRequest)(nil), "ethermint.evm.v1.QueryAccountRequest")
proto.RegisterType((*QueryAccountResponse)(nil), "ethermint.evm.v1.QueryAccountResponse")
@@ -1212,91 +1322,99 @@ func init() {
proto.RegisterType((*QueryStaticCallResponse)(nil), "ethermint.evm.v1.QueryStaticCallResponse")
proto.RegisterType((*EthCallRequest)(nil), "ethermint.evm.v1.EthCallRequest")
proto.RegisterType((*EstimateGasResponse)(nil), "ethermint.evm.v1.EstimateGasResponse")
proto.RegisterType((*QueryTraceTxRequest)(nil), "ethermint.evm.v1.QueryTraceTxRequest")
proto.RegisterType((*QueryTraceTxResponse)(nil), "ethermint.evm.v1.QueryTraceTxResponse")
}
func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) }
var fileDescriptor_e15a877459347994 = []byte{
// 1260 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x6f, 0x13, 0xc7,
0x17, 0xf7, 0x12, 0x63, 0x87, 0x17, 0xc2, 0x37, 0xdf, 0x21, 0x40, 0xd8, 0x06, 0xc7, 0x0c, 0x24,
0x71, 0x20, 0xec, 0x12, 0xb7, 0x42, 0x2a, 0x52, 0x55, 0xe2, 0x28, 0x50, 0x04, 0x54, 0xd4, 0x44,
0x3d, 0xf4, 0x62, 0x8d, 0xd7, 0xd3, 0xb5, 0x15, 0x7b, 0xc7, 0x78, 0xd6, 0xae, 0xd3, 0x28, 0xad,
0x84, 0x54, 0x84, 0xc4, 0xa5, 0x52, 0xef, 0x15, 0x52, 0xff, 0x80, 0xfe, 0x1b, 0x1c, 0x91, 0x7a,
0xa9, 0x7a, 0x40, 0x55, 0xd2, 0x43, 0xff, 0x8c, 0x6a, 0x7e, 0xac, 0xbd, 0xeb, 0xf5, 0xe2, 0x50,
0xf5, 0x94, 0x9d, 0x37, 0xef, 0xbd, 0xcf, 0xe7, 0xbd, 0x37, 0x33, 0x9f, 0x18, 0x16, 0xa9, 0x5f,
0xa7, 0x9d, 0x56, 0xc3, 0xf3, 0x6d, 0xda, 0x6b, 0xd9, 0xbd, 0x0d, 0xfb, 0x69, 0x97, 0x76, 0xf6,
0xac, 0x76, 0x87, 0xf9, 0x0c, 0xcd, 0x0d, 0x76, 0x2d, 0xda, 0x6b, 0x59, 0xbd, 0x0d, 0x73, 0xde,
0x65, 0x2e, 0x93, 0x9b, 0xb6, 0xf8, 0x52, 0x7e, 0xe6, 0x35, 0x87, 0xf1, 0x16, 0xe3, 0x76, 0x95,
0x70, 0xaa, 0x12, 0xd8, 0xbd, 0x8d, 0x2a, 0xf5, 0xc9, 0x86, 0xdd, 0x26, 0x6e, 0xc3, 0x23, 0x7e,
0x83, 0x79, 0xda, 0x77, 0xd1, 0x65, 0xcc, 0x6d, 0x52, 0x9b, 0xb4, 0x1b, 0x36, 0xf1, 0x3c, 0xe6,
0xcb, 0x4d, 0xae, 0x77, 0xcd, 0x18, 0x1f, 0x01, 0xac, 0xf6, 0x2e, 0xc6, 0xf6, 0xfc, 0xbe, 0xda,
0xc2, 0x1f, 0xc3, 0xd9, 0x2f, 0x04, 0xec, 0xa6, 0xe3, 0xb0, 0xae, 0xe7, 0x97, 0xe9, 0xd3, 0x2e,
0xe5, 0x3e, 0x5a, 0x80, 0x2c, 0xa9, 0xd5, 0x3a, 0x94, 0xf3, 0x05, 0x23, 0x6f, 0x14, 0x4e, 0x95,
0x83, 0xe5, 0xed, 0xe9, 0x17, 0xaf, 0x96, 0x52, 0x7f, 0xbf, 0x5a, 0x4a, 0x61, 0x07, 0xe6, 0xa3,
0xa1, 0xbc, 0xcd, 0x3c, 0x4e, 0x45, 0x6c, 0x95, 0x34, 0x89, 0xe7, 0xd0, 0x20, 0x56, 0x2f, 0xd1,
0x07, 0x70, 0xca, 0x61, 0x35, 0x5a, 0xa9, 0x13, 0x5e, 0x5f, 0x38, 0x21, 0xf7, 0xa6, 0x85, 0xe1,
0x33, 0xc2, 0xeb, 0x68, 0x1e, 0x4e, 0x7a, 0x4c, 0x04, 0x4d, 0xe5, 0x8d, 0x42, 0xba, 0xac, 0x16,
0xf8, 0x53, 0xb8, 0x28, 0x41, 0xb6, 0x64, 0x9f, 0xfe, 0x05, 0xcb, 0xe7, 0x06, 0x98, 0xe3, 0x32,
0x68, 0xb2, 0xcb, 0x70, 0x46, 0x8d, 0xa0, 0x12, 0xcd, 0x34, 0xab, 0xac, 0x9b, 0xca, 0x88, 0x4c,
0x98, 0xe6, 0x02, 0x54, 0xf0, 0x3b, 0x21, 0xf9, 0x0d, 0xd6, 0x22, 0x05, 0x51, 0x59, 0x2b, 0x5e,
0xb7, 0x55, 0xa5, 0x1d, 0x5d, 0xc1, 0xac, 0xb6, 0x7e, 0x2e, 0x8d, 0xf8, 0x01, 0x2c, 0x4a, 0x1e,
0x5f, 0x92, 0x66, 0xa3, 0x46, 0x7c, 0xd6, 0x19, 0x29, 0xe6, 0x32, 0x9c, 0x76, 0x98, 0x37, 0xca,
0x63, 0x46, 0xd8, 0x36, 0x63, 0x55, 0xbd, 0x34, 0xe0, 0x52, 0x42, 0x36, 0x5d, 0xd8, 0x2a, 0xfc,
0x2f, 0x60, 0x15, 0xcd, 0x18, 0x90, 0xfd, 0x0f, 0x4b, 0x0b, 0x0e, 0x51, 0x49, 0xcd, 0xf9, 0x7d,
0xc6, 0x73, 0x53, 0x1f, 0xa2, 0x41, 0xe8, 0xa4, 0x43, 0x84, 0x1f, 0x68, 0xb0, 0x27, 0x3e, 0xeb,
0x10, 0x77, 0x32, 0x18, 0x9a, 0x83, 0xa9, 0x5d, 0xba, 0xa7, 0xcf, 0x9b, 0xf8, 0x0c, 0xc1, 0xaf,
0x6b, 0xf8, 0x41, 0x32, 0x0d, 0x3f, 0x0f, 0x27, 0x7b, 0xa4, 0xd9, 0x0d, 0xc0, 0xd5, 0x02, 0xdf,
0x82, 0x39, 0x7d, 0x94, 0x6a, 0xef, 0x55, 0xe4, 0x2a, 0xfc, 0x3f, 0x14, 0xa7, 0x21, 0x10, 0xa4,
0xc5, 0xd9, 0x97, 0x51, 0xa7, 0xcb, 0xf2, 0x1b, 0x17, 0x01, 0x49, 0xc7, 0x9d, 0xfe, 0x43, 0xe6,
0xf2, 0x00, 0x02, 0x41, 0x5a, 0xde, 0x18, 0x95, 0x5f, 0x7e, 0x87, 0x92, 0xdf, 0xd1, 0xfd, 0x08,
0x62, 0x74, 0xfa, 0x35, 0x48, 0x37, 0x99, 0x2b, 0x48, 0x4d, 0x15, 0x66, 0x8a, 0xe7, 0xac, 0xd1,
0x07, 0xc9, 0x7a, 0xc8, 0xdc, 0xb2, 0x74, 0xc1, 0x07, 0x70, 0x4e, 0xcd, 0xa0, 0xc9, 0x9c, 0xdd,
0x09, 0xc0, 0xe8, 0x2e, 0xc0, 0xf0, 0x65, 0x92, 0x4d, 0x9d, 0x29, 0xae, 0x58, 0xea, 0xb6, 0x58,
0xe2, 0x19, 0xb3, 0xd4, 0x3b, 0xa8, 0x9f, 0x31, 0xeb, 0xf1, 0x70, 0x46, 0xe5, 0x50, 0x64, 0xa8,
0x80, 0x5f, 0x0c, 0x38, 0x3f, 0x8a, 0xaf, 0x8b, 0xb8, 0x03, 0x59, 0xbf, 0x5f, 0x09, 0xd5, 0x71,
0x39, 0x5e, 0xc7, 0x4e, 0x87, 0x78, 0x9c, 0x38, 0x22, 0xa9, 0x88, 0x2d, 0xa5, 0x5f, 0xbf, 0x5d,
0x4a, 0x95, 0x33, 0xbe, 0x6c, 0x07, 0xba, 0x37, 0x86, 0xee, 0xea, 0x44, 0xba, 0x0a, 0x3e, 0xcc,
0x17, 0xdf, 0x0c, 0x93, 0x2c, 0x35, 0x19, 0x6b, 0x05, 0x5d, 0x3a, 0x0f, 0x99, 0x3a, 0x6d, 0xb8,
0x75, 0x5f, 0xf6, 0x69, 0xaa, 0xac, 0x57, 0xd8, 0x86, 0x0b, 0xb1, 0x88, 0xe1, 0xf1, 0xaa, 0x0a,
0x83, 0x1e, 0xbe, 0x5a, 0xe0, 0x79, 0x3d, 0xfd, 0xc7, 0xa4, 0x43, 0x5a, 0xc1, 0x10, 0xf0, 0x23,
0x3d, 0xdf, 0xc0, 0xaa, 0x53, 0xdc, 0x82, 0x4c, 0x5b, 0x5a, 0x64, 0x8e, 0x99, 0xe2, 0x42, 0xbc,
0x33, 0x2a, 0x22, 0x68, 0x88, 0xf2, 0xc6, 0xe7, 0x06, 0x77, 0x95, 0xd3, 0xbb, 0x34, 0x18, 0x0d,
0x26, 0x83, 0x7b, 0xa8, 0xcd, 0x1a, 0xe6, 0x3e, 0x4c, 0x8b, 0x2e, 0x55, 0xbe, 0xa6, 0xfa, 0x2e,
0x94, 0x2c, 0x91, 0xee, 0x8f, 0xb7, 0x4b, 0x2b, 0x6e, 0xc3, 0xaf, 0x77, 0xab, 0x96, 0xc3, 0x5a,
0xb6, 0x56, 0x31, 0xf5, 0xe7, 0x06, 0xaf, 0xed, 0xda, 0xfe, 0x5e, 0x9b, 0x72, 0xeb, 0xbe, 0xe7,
0x8b, 0x8b, 0x2b, 0x53, 0xe2, 0x1b, 0xba, 0x1f, 0x4f, 0x84, 0x70, 0x39, 0x5b, 0xa4, 0xd9, 0x0c,
0xdf, 0x85, 0x1a, 0xf1, 0x49, 0x70, 0x17, 0xc4, 0x37, 0xfe, 0x04, 0xce, 0x6c, 0xfb, 0x75, 0xe5,
0x36, 0x38, 0x8e, 0xa4, 0xe3, 0xf2, 0xc0, 0x4b, 0x7c, 0xa3, 0x0b, 0x90, 0x75, 0x09, 0xaf, 0x38,
0xa4, 0xad, 0x1f, 0xaf, 0x8c, 0x4b, 0xf8, 0x16, 0x69, 0xe3, 0x55, 0x38, 0xbb, 0xcd, 0xfd, 0x46,
0x8b, 0xf8, 0xf4, 0x1e, 0x19, 0xb6, 0x6d, 0x0e, 0xa6, 0x5c, 0xa2, 0x52, 0xa4, 0xcb, 0xe2, 0xb3,
0xf8, 0x6c, 0x16, 0x4e, 0x4a, 0x5e, 0xe8, 0x07, 0x03, 0xb2, 0xfa, 0x19, 0x45, 0xcb, 0xf1, 0x76,
0x8e, 0xd1, 0x49, 0x73, 0x65, 0x92, 0x9b, 0x82, 0xc5, 0xd7, 0x9f, 0xfd, 0xf6, 0xd7, 0x4f, 0x27,
0x96, 0xd1, 0x15, 0x3b, 0x26, 0xc5, 0xfa, 0x29, 0xb5, 0xf7, 0xf5, 0xbb, 0x71, 0x80, 0x7e, 0x36,
0x60, 0x36, 0xa2, 0x56, 0xe8, 0x7a, 0x02, 0xcc, 0x38, 0x55, 0x34, 0xd7, 0x8f, 0xe7, 0xac, 0x99,
0x15, 0x25, 0xb3, 0x75, 0x74, 0x2d, 0xce, 0x2c, 0x10, 0xc6, 0x18, 0xc1, 0x5f, 0x0d, 0x98, 0x1b,
0x15, 0x1e, 0x64, 0x25, 0xc0, 0x26, 0xe8, 0x9d, 0x69, 0x1f, 0xdb, 0x5f, 0x33, 0xbd, 0x2d, 0x99,
0x7e, 0x84, 0x8a, 0x71, 0xa6, 0xbd, 0x20, 0x66, 0x48, 0x36, 0xac, 0xa5, 0x07, 0xe8, 0xb9, 0x01,
0x59, 0x2d, 0x31, 0x89, 0xa3, 0x8d, 0xaa, 0x57, 0xe2, 0x68, 0x47, 0x94, 0x0a, 0xaf, 0x4b, 0x5a,
0x2b, 0xe8, 0x6a, 0x9c, 0x96, 0x96, 0x2c, 0x1e, 0x6a, 0xdd, 0x4b, 0x03, 0xb2, 0x5a, 0x6c, 0x12,
0x89, 0x44, 0x95, 0x2d, 0x91, 0xc8, 0x88, 0x66, 0xe1, 0x0d, 0x49, 0xe4, 0x3a, 0x5a, 0x8b, 0x13,
0xe1, 0xca, 0x75, 0xc8, 0xc3, 0xde, 0xdf, 0xa5, 0x7b, 0x07, 0xe8, 0x5b, 0x48, 0x0b, 0x4d, 0x42,
0x38, 0xf1, 0xc8, 0x0c, 0x84, 0xce, 0xbc, 0xf2, 0x4e, 0x1f, 0xcd, 0x61, 0x4d, 0x72, 0xb8, 0x82,
0x2e, 0x8f, 0x3b, 0x4d, 0xb5, 0x48, 0x27, 0xbe, 0x87, 0x8c, 0x92, 0x2c, 0x74, 0x35, 0x21, 0x73,
0x44, 0x05, 0xcd, 0xe5, 0x09, 0x5e, 0x9a, 0x41, 0x41, 0x32, 0xc0, 0x28, 0x6f, 0x8f, 0xf9, 0xa7,
0x57, 0x4a, 0x89, 0xbd, 0x2f, 0x84, 0x4c, 0x8e, 0xe2, 0xd4, 0x40, 0x72, 0xd0, 0x6a, 0xd2, 0xb8,
0x47, 0x44, 0xd1, 0x2c, 0x4c, 0x76, 0x9c, 0x7c, 0xe9, 0xab, 0xc2, 0x39, 0xc2, 0xe6, 0x85, 0x01,
0x30, 0x54, 0x0a, 0xf4, 0x4e, 0x94, 0xb0, 0xfc, 0x98, 0x6b, 0xc7, 0xf0, 0xd4, 0x84, 0x96, 0x25,
0xa1, 0x25, 0x74, 0x29, 0x89, 0x90, 0xd4, 0x21, 0xf4, 0x0d, 0x64, 0x94, 0x74, 0x24, 0x4e, 0x26,
0xa2, 0x50, 0x89, 0x93, 0x89, 0x2a, 0x16, 0xce, 0x4b, 0x74, 0x13, 0x2d, 0xc4, 0xd1, 0x95, 0x36,
0xa1, 0x3e, 0x64, 0xf5, 0x93, 0x8f, 0xf2, 0xf1, 0x9c, 0x51, 0x35, 0x30, 0xc7, 0x0c, 0xec, 0x11,
0x77, 0xb7, 0x85, 0x8d, 0x76, 0x5b, 0x3b, 0xfd, 0x01, 0x2e, 0x96, 0xb8, 0x8b, 0xc8, 0x8c, 0xe3,
0x52, 0xbf, 0x5e, 0x71, 0x04, 0xdc, 0x77, 0x30, 0x13, 0x52, 0x8b, 0x63, 0xa0, 0x8f, 0xa9, 0x79,
0x8c, 0xdc, 0xe0, 0x15, 0x89, 0x9d, 0x47, 0xb9, 0x31, 0xd8, 0xda, 0xbd, 0xe2, 0x12, 0x5e, 0x2a,
0xbd, 0x3e, 0xcc, 0x19, 0x6f, 0x0e, 0x73, 0xc6, 0x9f, 0x87, 0x39, 0xe3, 0xc7, 0xa3, 0x5c, 0xea,
0xcd, 0x51, 0x2e, 0xf5, 0xfb, 0x51, 0x2e, 0xf5, 0x55, 0x21, 0x24, 0xb3, 0x7e, 0x9d, 0x74, 0x78,
0x83, 0x87, 0x72, 0xf5, 0x65, 0x36, 0x29, 0xb6, 0xd5, 0x8c, 0xfc, 0x45, 0xf7, 0xe1, 0x3f, 0x01,
0x00, 0x00, 0xff, 0xff, 0xa4, 0x91, 0x34, 0x9c, 0x9a, 0x0e, 0x00, 0x00,
// 1360 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcd, 0x6f, 0x13, 0x47,
0x14, 0xcf, 0x12, 0x63, 0x87, 0x67, 0x42, 0xd3, 0x21, 0x40, 0xd8, 0x06, 0x27, 0x0c, 0xe4, 0x0b,
0xc2, 0x2e, 0x71, 0x2b, 0xa4, 0x22, 0x55, 0x85, 0x44, 0x40, 0x11, 0x50, 0x51, 0x13, 0xf5, 0xd0,
0x8b, 0x35, 0x5e, 0x0f, 0x6b, 0x2b, 0xf6, 0x8e, 0xf1, 0x8c, 0x5d, 0xa7, 0x34, 0x6d, 0x55, 0xa9,
0x08, 0x89, 0x4b, 0xa5, 0xde, 0x2b, 0xa4, 0xaa, 0xe7, 0xfe, 0x1b, 0x1c, 0x91, 0x7a, 0xa9, 0x7a,
0x40, 0x15, 0xf4, 0xd0, 0x3f, 0xa3, 0x9a, 0x8f, 0xb5, 0x77, 0xbd, 0xde, 0x38, 0x54, 0x3d, 0x79,
0x3e, 0xde, 0x7b, 0xbf, 0xdf, 0x7b, 0x6f, 0x66, 0x7e, 0x6b, 0x98, 0xa7, 0xa2, 0x46, 0xdb, 0xcd,
0x7a, 0x20, 0x5c, 0xda, 0x6d, 0xba, 0xdd, 0x0d, 0xf7, 0x51, 0x87, 0xb6, 0x77, 0x9d, 0x56, 0x9b,
0x09, 0x86, 0x66, 0xfa, 0xbb, 0x0e, 0xed, 0x36, 0x9d, 0xee, 0x86, 0x3d, 0xeb, 0x33, 0x9f, 0xa9,
0x4d, 0x57, 0x8e, 0xb4, 0x9d, 0x7d, 0xc1, 0x63, 0xbc, 0xc9, 0xb8, 0x5b, 0x21, 0x9c, 0xea, 0x00,
0x6e, 0x77, 0xa3, 0x42, 0x05, 0xd9, 0x70, 0x5b, 0xc4, 0xaf, 0x07, 0x44, 0xd4, 0x59, 0x60, 0x6c,
0xe7, 0x7d, 0xc6, 0xfc, 0x06, 0x75, 0x49, 0xab, 0xee, 0x92, 0x20, 0x60, 0x42, 0x6d, 0x72, 0xb3,
0x6b, 0x27, 0xf8, 0x48, 0x60, 0xbd, 0x77, 0x3a, 0xb1, 0x27, 0x7a, 0x7a, 0x0b, 0x7f, 0x08, 0xc7,
0x3f, 0x93, 0xb0, 0xd7, 0x3d, 0x8f, 0x75, 0x02, 0x51, 0xa2, 0x8f, 0x3a, 0x94, 0x0b, 0x34, 0x07,
0x39, 0x52, 0xad, 0xb6, 0x29, 0xe7, 0x73, 0xd6, 0xa2, 0xb5, 0x7a, 0xa4, 0x14, 0x4e, 0xaf, 0x4e,
0x3d, 0x7d, 0xbe, 0x30, 0xf1, 0xcf, 0xf3, 0x85, 0x09, 0xec, 0xc1, 0x6c, 0xdc, 0x95, 0xb7, 0x58,
0xc0, 0xa9, 0xf4, 0xad, 0x90, 0x06, 0x09, 0x3c, 0x1a, 0xfa, 0x9a, 0x29, 0x7a, 0x0f, 0x8e, 0x78,
0xac, 0x4a, 0xcb, 0x35, 0xc2, 0x6b, 0x73, 0x87, 0xd4, 0xde, 0x94, 0x5c, 0xf8, 0x84, 0xf0, 0x1a,
0x9a, 0x85, 0xc3, 0x01, 0x93, 0x4e, 0x93, 0x8b, 0xd6, 0x6a, 0xa6, 0xa4, 0x27, 0xf8, 0x63, 0x38,
0xad, 0x40, 0xb6, 0x54, 0x9d, 0xfe, 0x03, 0xcb, 0x27, 0x16, 0xd8, 0xa3, 0x22, 0x18, 0xb2, 0x4b,
0x70, 0x4c, 0xb7, 0xa0, 0x1c, 0x8f, 0x34, 0xad, 0x57, 0xaf, 0xeb, 0x45, 0x64, 0xc3, 0x14, 0x97,
0xa0, 0x92, 0xdf, 0x21, 0xc5, 0xaf, 0x3f, 0x97, 0x21, 0x88, 0x8e, 0x5a, 0x0e, 0x3a, 0xcd, 0x0a,
0x6d, 0x9b, 0x0c, 0xa6, 0xcd, 0xea, 0xa7, 0x6a, 0x11, 0xdf, 0x81, 0x79, 0xc5, 0xe3, 0x73, 0xd2,
0xa8, 0x57, 0x89, 0x60, 0xed, 0xa1, 0x64, 0xce, 0xc2, 0x51, 0x8f, 0x05, 0xc3, 0x3c, 0xf2, 0x72,
0xed, 0x7a, 0x22, 0xab, 0x67, 0x16, 0x9c, 0x49, 0x89, 0x66, 0x12, 0x5b, 0x81, 0x77, 0x42, 0x56,
0xf1, 0x88, 0x21, 0xd9, 0xff, 0x31, 0xb5, 0xf0, 0x10, 0x6d, 0xea, 0x3e, 0xbf, 0x4d, 0x7b, 0x2e,
0x9b, 0x43, 0xd4, 0x77, 0x1d, 0x77, 0x88, 0xf0, 0x1d, 0x03, 0xf6, 0x40, 0xb0, 0x36, 0xf1, 0xc7,
0x83, 0xa1, 0x19, 0x98, 0xdc, 0xa1, 0xbb, 0xe6, 0xbc, 0xc9, 0x61, 0x04, 0x7e, 0xdd, 0xc0, 0xf7,
0x83, 0x19, 0xf8, 0x59, 0x38, 0xdc, 0x25, 0x8d, 0x4e, 0x08, 0xae, 0x27, 0xf8, 0x0a, 0xcc, 0x98,
0xa3, 0x54, 0x7d, 0xab, 0x24, 0x57, 0xe0, 0xdd, 0x88, 0x9f, 0x81, 0x40, 0x90, 0x91, 0x67, 0x5f,
0x79, 0x1d, 0x2d, 0xa9, 0x31, 0x2e, 0x02, 0x52, 0x86, 0xdb, 0xbd, 0xbb, 0xcc, 0xe7, 0x21, 0x04,
0x82, 0x8c, 0xba, 0x31, 0x3a, 0xbe, 0x1a, 0x47, 0x82, 0x5f, 0x33, 0xf5, 0x08, 0x7d, 0x4c, 0xf8,
0x35, 0xc8, 0x34, 0x98, 0x2f, 0x49, 0x4d, 0xae, 0xe6, 0x8b, 0x27, 0x9c, 0xe1, 0x07, 0xc9, 0xb9,
0xcb, 0xfc, 0x92, 0x32, 0xc1, 0x7b, 0x70, 0x42, 0xf7, 0xa0, 0xc1, 0xbc, 0x9d, 0x31, 0xc0, 0xe8,
0x26, 0xc0, 0xe0, 0x65, 0x52, 0x45, 0xcd, 0x17, 0x97, 0x1d, 0x7d, 0x5b, 0x1c, 0xf9, 0x8c, 0x39,
0xfa, 0x1d, 0x34, 0xcf, 0x98, 0x73, 0x7f, 0xd0, 0xa3, 0x52, 0xc4, 0x33, 0x92, 0xc0, 0x2f, 0x16,
0x9c, 0x1c, 0xc6, 0x37, 0x49, 0x5c, 0x83, 0x9c, 0xe8, 0x95, 0x23, 0x79, 0x9c, 0x4d, 0xe6, 0xb1,
0xdd, 0x26, 0x01, 0x27, 0x9e, 0x0c, 0x2a, 0x7d, 0x37, 0x33, 0x2f, 0x5e, 0x2d, 0x4c, 0x94, 0xb2,
0x42, 0x95, 0x03, 0xdd, 0x1a, 0x41, 0x77, 0x65, 0x2c, 0x5d, 0x0d, 0x1f, 0xe5, 0x8b, 0x2f, 0x47,
0x49, 0x6e, 0x36, 0x18, 0x6b, 0x86, 0x55, 0x3a, 0x09, 0xd9, 0x1a, 0xad, 0xfb, 0x35, 0xa1, 0xea,
0x34, 0x59, 0x32, 0x33, 0xec, 0xc2, 0xa9, 0x84, 0xc7, 0xe0, 0x78, 0x55, 0xe4, 0x82, 0x69, 0xbe,
0x9e, 0xe0, 0x59, 0xd3, 0xfd, 0xfb, 0xa4, 0x4d, 0x9a, 0x61, 0x13, 0xf0, 0x3d, 0xd3, 0xdf, 0x70,
0xd5, 0x84, 0xb8, 0x02, 0xd9, 0x96, 0x5a, 0x51, 0x31, 0xf2, 0xc5, 0xb9, 0x64, 0x65, 0xb4, 0x47,
0x58, 0x10, 0x6d, 0x8d, 0x4f, 0xf4, 0xef, 0x2a, 0xa7, 0x37, 0x69, 0xd8, 0x1a, 0x4c, 0xfa, 0xf7,
0xd0, 0x2c, 0x1b, 0x98, 0xdb, 0x30, 0x25, 0xab, 0x54, 0x7e, 0x48, 0xcd, 0x5d, 0xd8, 0x74, 0x64,
0xb8, 0x3f, 0x5f, 0x2d, 0x2c, 0xfb, 0x75, 0x51, 0xeb, 0x54, 0x1c, 0x8f, 0x35, 0x5d, 0xa3, 0x62,
0xfa, 0xe7, 0x12, 0xaf, 0xee, 0xb8, 0x62, 0xb7, 0x45, 0xb9, 0x73, 0x3b, 0x10, 0xf2, 0xe2, 0xaa,
0x90, 0xf8, 0x92, 0xa9, 0xc7, 0x03, 0x29, 0x5c, 0xde, 0x16, 0x69, 0x34, 0xa2, 0x77, 0xa1, 0x4a,
0x04, 0x09, 0xef, 0x82, 0x1c, 0xe3, 0x8f, 0xe0, 0xd8, 0x0d, 0x51, 0xd3, 0x66, 0xfd, 0xe3, 0x48,
0xda, 0x3e, 0x0f, 0xad, 0xe4, 0x18, 0x9d, 0x82, 0x9c, 0x4f, 0x78, 0xd9, 0x23, 0x2d, 0xf3, 0x78,
0x65, 0x7d, 0xc2, 0xb7, 0x48, 0x0b, 0xaf, 0xc0, 0xf1, 0x1b, 0x5c, 0xd4, 0x9b, 0x44, 0xd0, 0x5b,
0x64, 0x50, 0xb6, 0x19, 0x98, 0xf4, 0x89, 0x0e, 0x91, 0x29, 0xc9, 0x21, 0xfe, 0xd5, 0x0a, 0x2f,
0x50, 0x9b, 0x78, 0x74, 0xbb, 0x17, 0xa2, 0x6d, 0xc0, 0x64, 0x93, 0xfb, 0xa6, 0xba, 0x0b, 0xc9,
0xea, 0xde, 0xe3, 0xfe, 0x0d, 0xb9, 0x46, 0x3b, 0xcd, 0xed, 0x5e, 0x49, 0xda, 0xa2, 0xd3, 0x30,
0x25, 0x7a, 0xe5, 0x7a, 0x50, 0xa5, 0x3d, 0xc5, 0x66, 0xba, 0x94, 0x13, 0xbd, 0xdb, 0x72, 0x8a,
0xae, 0xc1, 0x51, 0x21, 0xe3, 0x97, 0x3d, 0x16, 0x3c, 0xac, 0xfb, 0xea, 0x1d, 0xcd, 0x17, 0xcf,
0x8c, 0x3c, 0xce, 0x1e, 0xdd, 0x52, 0x46, 0xa5, 0xbc, 0x18, 0x4c, 0xf0, 0x05, 0xd3, 0xa1, 0x3e,
0xcd, 0xf4, 0xda, 0x15, 0xbf, 0x3b, 0x06, 0x87, 0x95, 0x31, 0xfa, 0xc1, 0x82, 0x9c, 0x91, 0x06,
0xb4, 0x94, 0x44, 0x1b, 0xa1, 0xfd, 0xf6, 0xf2, 0x38, 0x33, 0x0d, 0x8c, 0x2f, 0x7e, 0xff, 0xfb,
0xdf, 0x3f, 0x1d, 0x5a, 0x42, 0xe7, 0xdc, 0xc4, 0xe7, 0x85, 0x91, 0x07, 0xf7, 0xb1, 0x79, 0x0b,
0xf7, 0xd0, 0xcf, 0x16, 0x4c, 0xc7, 0x14, 0x18, 0x5d, 0x4c, 0x81, 0x19, 0xa5, 0xf4, 0xf6, 0xfa,
0xc1, 0x8c, 0x0d, 0xb3, 0xa2, 0x62, 0xb6, 0x8e, 0x2e, 0x24, 0x99, 0x85, 0x62, 0x9f, 0x20, 0xf8,
0x9b, 0x05, 0x33, 0xc3, 0x62, 0x8a, 0x9c, 0x14, 0xd8, 0x14, 0x0d, 0xb7, 0xdd, 0x03, 0xdb, 0x1b,
0xa6, 0x57, 0x15, 0xd3, 0x0f, 0x50, 0x31, 0xc9, 0xb4, 0x1b, 0xfa, 0x0c, 0xc8, 0x46, 0xbf, 0x0f,
0xf6, 0xd0, 0x13, 0x0b, 0x72, 0x46, 0x36, 0x53, 0x5b, 0x1b, 0x57, 0xe4, 0xd4, 0xd6, 0x0e, 0xa9,
0x2f, 0x5e, 0x57, 0xb4, 0x96, 0xd1, 0xf9, 0x24, 0x2d, 0x23, 0xc3, 0x3c, 0x52, 0xba, 0x67, 0x16,
0xe4, 0x8c, 0x80, 0xa6, 0x12, 0x89, 0xab, 0x75, 0x2a, 0x91, 0x21, 0x1d, 0xc6, 0x1b, 0x8a, 0xc8,
0x45, 0xb4, 0x96, 0x24, 0xc2, 0xb5, 0xe9, 0x80, 0x87, 0xfb, 0x78, 0x87, 0xee, 0xee, 0xa1, 0xaf,
0x20, 0x23, 0x75, 0x16, 0xe1, 0xd4, 0x23, 0xd3, 0x17, 0x6f, 0xfb, 0xdc, 0xbe, 0x36, 0x86, 0xc3,
0x9a, 0xe2, 0x70, 0x0e, 0x9d, 0x1d, 0x75, 0x9a, 0xaa, 0xb1, 0x4a, 0x7c, 0x0b, 0x59, 0x2d, 0xc3,
0xe8, 0x7c, 0x4a, 0xe4, 0x98, 0xb2, 0xdb, 0x4b, 0x63, 0xac, 0x0c, 0x83, 0x55, 0xc5, 0x00, 0xa3,
0x45, 0x77, 0xc4, 0x87, 0xbc, 0x92, 0x47, 0xf7, 0xb1, 0x14, 0x67, 0xd5, 0x8a, 0x23, 0x7d, 0x19,
0x45, 0x2b, 0x69, 0xed, 0x1e, 0x12, 0x7a, 0x7b, 0x75, 0xbc, 0xe1, 0xf8, 0x4b, 0x5f, 0x91, 0xc6,
0x31, 0x36, 0x4f, 0x2d, 0x80, 0x81, 0xfa, 0xa1, 0x7d, 0x51, 0xa2, 0x92, 0x6a, 0xaf, 0x1d, 0xc0,
0xd2, 0x10, 0x5a, 0x52, 0x84, 0x16, 0xd0, 0x99, 0x34, 0x42, 0x4a, 0x5b, 0xd1, 0x97, 0x90, 0xd5,
0x72, 0x98, 0xda, 0x99, 0x98, 0xea, 0xa6, 0x76, 0x26, 0xae, 0xc2, 0x78, 0x51, 0xa1, 0xdb, 0x68,
0x2e, 0x89, 0xae, 0xf5, 0x16, 0xf5, 0x20, 0x67, 0x64, 0x0c, 0x2d, 0x26, 0x63, 0xc6, 0x15, 0xce,
0x5e, 0x19, 0x27, 0x33, 0x21, 0x2e, 0x56, 0xb8, 0xf3, 0xc8, 0x4e, 0xe2, 0x52, 0x51, 0x2b, 0x7b,
0x12, 0xee, 0x1b, 0xc8, 0x47, 0x14, 0xf0, 0x00, 0xe8, 0x23, 0x72, 0x1e, 0x21, 0xa1, 0x78, 0x59,
0x61, 0x2f, 0xa2, 0xc2, 0x08, 0x6c, 0x63, 0x5e, 0xf6, 0x09, 0x47, 0x5f, 0x43, 0xce, 0x68, 0x55,
0xea, 0xab, 0x10, 0x97, 0xdc, 0xd4, 0x57, 0x61, 0x48, 0xf2, 0xf6, 0xcb, 0x5e, 0x8b, 0xac, 0xe8,
0x6d, 0x6e, 0xbe, 0x78, 0x5d, 0xb0, 0x5e, 0xbe, 0x2e, 0x58, 0x7f, 0xbd, 0x2e, 0x58, 0x3f, 0xbe,
0x29, 0x4c, 0xbc, 0x7c, 0x53, 0x98, 0xf8, 0xe3, 0x4d, 0x61, 0xe2, 0x8b, 0xd5, 0xc8, 0x87, 0x8b,
0xa8, 0x91, 0x36, 0xaf, 0xf3, 0x48, 0x9c, 0x9e, 0x8a, 0xa4, 0x3e, 0x5f, 0x2a, 0x59, 0xf5, 0x1f,
0xf9, 0xfd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xca, 0x68, 0xb3, 0x71, 0xec, 0x0f, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -1337,6 +1455,8 @@ type QueryClient interface {
EthCall(ctx context.Context, in *EthCallRequest, opts ...grpc.CallOption) (*MsgEthereumTxResponse, error)
// EstimateGas implements the `eth_estimateGas` rpc api
EstimateGas(ctx context.Context, in *EthCallRequest, opts ...grpc.CallOption) (*EstimateGasResponse, error)
// TraceTx implements the `debug_traceTransaction` rpc api
TraceTx(ctx context.Context, in *QueryTraceTxRequest, opts ...grpc.CallOption) (*QueryTraceTxResponse, error)
}
type queryClient struct {
@@ -1455,6 +1575,15 @@ func (c *queryClient) EstimateGas(ctx context.Context, in *EthCallRequest, opts
return out, nil
}
func (c *queryClient) TraceTx(ctx context.Context, in *QueryTraceTxRequest, opts ...grpc.CallOption) (*QueryTraceTxResponse, error) {
out := new(QueryTraceTxResponse)
err := c.cc.Invoke(ctx, "/ethermint.evm.v1.Query/TraceTx", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// QueryServer is the server API for Query service.
type QueryServer interface {
// Account queries an Ethereum account.
@@ -1483,6 +1612,8 @@ type QueryServer interface {
EthCall(context.Context, *EthCallRequest) (*MsgEthereumTxResponse, error)
// EstimateGas implements the `eth_estimateGas` rpc api
EstimateGas(context.Context, *EthCallRequest) (*EstimateGasResponse, error)
// TraceTx implements the `debug_traceTransaction` rpc api
TraceTx(context.Context, *QueryTraceTxRequest) (*QueryTraceTxResponse, error)
}
// UnimplementedQueryServer can be embedded to have forward compatible implementations.
@@ -1525,6 +1656,9 @@ func (*UnimplementedQueryServer) EthCall(ctx context.Context, req *EthCallReques
func (*UnimplementedQueryServer) EstimateGas(ctx context.Context, req *EthCallRequest) (*EstimateGasResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method EstimateGas not implemented")
}
func (*UnimplementedQueryServer) TraceTx(ctx context.Context, req *QueryTraceTxRequest) (*QueryTraceTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method TraceTx not implemented")
}
func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
s.RegisterService(&_Query_serviceDesc, srv)
@@ -1746,6 +1880,24 @@ func _Query_EstimateGas_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler)
}
func _Query_TraceTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(QueryTraceTxRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(QueryServer).TraceTx(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/ethermint.evm.v1.Query/TraceTx",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryServer).TraceTx(ctx, req.(*QueryTraceTxRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Query_serviceDesc = grpc.ServiceDesc{
ServiceName: "ethermint.evm.v1.Query",
HandlerType: (*QueryServer)(nil),
@@ -1798,6 +1950,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{
MethodName: "EstimateGas",
Handler: _Query_EstimateGas_Handler,
},
{
MethodName: "TraceTx",
Handler: _Query_TraceTx_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "ethermint/evm/v1/query.proto",
@@ -2623,6 +2779,88 @@ func (m *EstimateGasResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *QueryTraceTxRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *QueryTraceTxRequest) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *QueryTraceTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.TraceConfig != nil {
{
size, err := m.TraceConfig.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintQuery(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x1a
}
if m.TxIndex != 0 {
i = encodeVarintQuery(dAtA, i, uint64(m.TxIndex))
i--
dAtA[i] = 0x10
}
if m.Msg != nil {
{
size, err := m.Msg.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintQuery(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *QueryTraceTxResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *QueryTraceTxResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *QueryTraceTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Data) > 0 {
i -= len(m.Data)
copy(dAtA[i:], m.Data)
i = encodeVarintQuery(dAtA, i, uint64(len(m.Data)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
offset -= sovQuery(v)
base := offset
@@ -2983,6 +3221,39 @@ func (m *EstimateGasResponse) Size() (n int) {
return n
}
func (m *QueryTraceTxRequest) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.Msg != nil {
l = m.Msg.Size()
n += 1 + l + sovQuery(uint64(l))
}
if m.TxIndex != 0 {
n += 1 + sovQuery(uint64(m.TxIndex))
}
if m.TraceConfig != nil {
l = m.TraceConfig.Size()
n += 1 + l + sovQuery(uint64(l))
}
return n
}
func (m *QueryTraceTxResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Data)
if l > 0 {
n += 1 + l + sovQuery(uint64(l))
}
return n
}
func sovQuery(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
}
@@ -5214,6 +5485,231 @@ func (m *EstimateGasResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *QueryTraceTxRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: QueryTraceTxRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: QueryTraceTxRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthQuery
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Msg == nil {
m.Msg = &MsgEthereumTx{}
}
if err := m.Msg.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TxIndex", wireType)
}
m.TxIndex = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.TxIndex |= uint32(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TraceConfig", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthQuery
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.TraceConfig == nil {
m.TraceConfig = &TraceConfig{}
}
if err := m.TraceConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *QueryTraceTxResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: QueryTraceTxResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: QueryTraceTxResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
}
var byteLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
byteLen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if byteLen < 0 {
return ErrInvalidLengthQuery
}
postIndex := iNdEx + byteLen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...)
if m.Data == nil {
m.Data = []byte{}
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipQuery(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
+80
View File
@@ -629,6 +629,42 @@ func local_request_Query_EstimateGas_0(ctx context.Context, marshaler runtime.Ma
}
var (
filter_Query_TraceTx_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Query_TraceTx_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryTraceTxRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TraceTx_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.TraceTx(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_TraceTx_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryTraceTxRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TraceTx_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.TraceTx(ctx, &protoReq)
return msg, metadata, err
}
// RegisterQueryHandlerServer registers the http handlers for service Query to "mux".
// UnaryRPC :call QueryServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -875,6 +911,26 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
})
mux.Handle("GET", pattern_Query_TraceTx_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_TraceTx_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_TraceTx_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -1156,6 +1212,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
})
mux.Handle("GET", pattern_Query_TraceTx_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Query_TraceTx_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_TraceTx_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -1183,6 +1259,8 @@ var (
pattern_Query_EthCall_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "eth_call"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_EstimateGas_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "estimate_gas"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_TraceTx_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "trace_tx"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
@@ -1209,4 +1287,6 @@ var (
forward_Query_EthCall_0 = runtime.ForwardResponseMessage
forward_Query_EstimateGas_0 = runtime.ForwardResponseMessage
forward_Query_TraceTx_0 = runtime.ForwardResponseMessage
)
+62
View File
@@ -1,6 +1,7 @@
package types
import (
"fmt"
"math/big"
"os"
@@ -38,3 +39,64 @@ func NewTracer(tracer string, msg core.Message, cfg *params.ChainConfig, height
return nil
}
}
// ExecutionResult groups all structured logs emitted by the EVM
// while replaying a transaction in debug mode as well as transaction
// execution status, the amount of gas used and the return value
type ExecutionResult struct {
Gas uint64 `json:"gas"`
Failed bool `json:"failed"`
ReturnValue string `json:"returnValue"`
StructLogs []StructLogRes `json:"structLogs"`
}
// StructLogRes stores a structured log emitted by the EVM while replaying a
// transaction in debug mode. Taken from go-ethereum
type StructLogRes struct {
Pc uint64 `json:"pc"`
Op string `json:"op"`
Gas uint64 `json:"gas"`
GasCost uint64 `json:"gasCost"`
Depth int `json:"depth"`
Error string `json:"error,omitempty"`
Stack *[]string `json:"stack,omitempty"`
Memory *[]string `json:"memory,omitempty"`
Storage *map[string]string `json:"storage,omitempty"`
}
// FormatLogs formats EVM returned structured logs for json output
func FormatLogs(logs []vm.StructLog) []StructLogRes {
formatted := make([]StructLogRes, len(logs))
for index, trace := range logs {
formatted[index] = StructLogRes{
Pc: trace.Pc,
Op: trace.Op.String(),
Gas: trace.Gas,
GasCost: trace.GasCost,
Depth: trace.Depth,
Error: trace.ErrorString(),
}
if trace.Stack != nil {
stack := make([]string, len(trace.Stack))
for i, stackValue := range trace.Stack {
stack[i] = fmt.Sprintf("%x", stackValue)
}
formatted[index].Stack = &stack
}
if trace.Memory != nil {
memory := make([]string, 0, (len(trace.Memory)+31)/32)
for i := 0; i+32 <= len(trace.Memory); i += 32 {
memory = append(memory, fmt.Sprintf("%x", trace.Memory[i:i+32]))
}
formatted[index].Memory = &memory
}
if trace.Storage != nil {
storage := make(map[string]string)
for i, storageValue := range trace.Storage {
storage[fmt.Sprintf("%x", i)] = fmt.Sprintf("%x", storageValue)
}
formatted[index].Storage = &storage
}
}
return formatted
}