upgrade to ethermint v0.21.0 #99

Closed
0xmuralik wants to merge 384 commits from murali/update-fork into main
31 changed files with 465 additions and 248 deletions
Showing only changes of commit 71e51aabf6 - Show all commits

View File

@ -46,6 +46,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
* (feemarket) [#1194](https://github.com/evmos/ethermint/pull/1194) Apply feemarket to native cosmos tx.
* (eth) [#1346](https://github.com/evmos/ethermint/pull/1346) Added support for `sdk.Dec` and `ed25519` type on eip712.
* (ante) [1460](https://github.com/evmos/ethermint/pull/1460) Add KV Gas config on ethereum Txs.
* (geth) [#1413](https://github.com/evmos/ethermint/pull/1413) Update geth version to v1.10.25.
### API Breaking

View File

@ -15,9 +15,11 @@ import (
ethcrypto "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto/secp256k1"
"github.com/ethereum/go-ethereum/signer/core/apitypes"
"github.com/evmos/ethermint/crypto/ethsecp256k1"
"github.com/evmos/ethermint/ethereum/eip712"
ethermint "github.com/evmos/ethermint/types"
evmtypes "github.com/evmos/ethermint/x/evm/types"
)
@ -218,7 +220,7 @@ func VerifySignature(
return sdkerrors.Wrap(err, "failed to pack tx data in EIP712 object")
}
sigHash, err := eip712.ComputeTypedDataHash(typedData)
sigHash, _, err := apitypes.TypedDataAndHash(typedData)
if err != nil {
return err
}

View File

@ -16,6 +16,7 @@ import (
types2 "github.com/cosmos/cosmos-sdk/x/bank/types"
types3 "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/signer/core/apitypes"
"github.com/evmos/ethermint/ethereum/eip712"
"github.com/evmos/ethermint/types"
@ -409,7 +410,7 @@ func (suite *AnteTestSuite) CreateTestEIP712CosmosTxBuilder(
})
suite.Require().NoError(err)
sigHash, err := eip712.ComputeTypedDataHash(typedData)
sigHash, _, err := apitypes.TypedDataAndHash(typedData)
suite.Require().NoError(err)
// Sign typedData

View File

@ -275,6 +275,7 @@ TraceConfig holds extra parameters to trace functions.
| `overrides` | [ChainConfig](#ethermint.evm.v1.ChainConfig) | | Chain overrides, can be used to execute a trace using future fork rules |
| `enable_memory` | [bool](#bool) | | enable memory capture |
| `enable_return_data` | [bool](#bool) | | enable return data capture |
| `tracer_json_config` | [string](#string) | | tracer config |

View File

@ -21,28 +21,9 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/signer/core/apitypes"
)
// ComputeTypedDataHash computes keccak hash of typed data for signing.
func ComputeTypedDataHash(typedData apitypes.TypedData) ([]byte, error) {
domainSeparator, err := typedData.HashStruct("EIP712Domain", typedData.Domain.Map())
if err != nil {
err = errorsmod.Wrap(err, "failed to pack and hash typedData EIP712Domain")
return nil, err
}
typedDataHash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message)
if err != nil {
err = errorsmod.Wrap(err, "failed to pack and hash typedData primary type")
return nil, err
}
rawData := []byte(fmt.Sprintf("\x19\x01%s%s", string(domainSeparator), string(typedDataHash)))
return crypto.Keccak256(rawData), nil
}
// WrapTxToTypedData is an ultimate method that wraps Amino-encoded Cosmos Tx JSON data
// into an EIP712-compatible TypedData request.
func WrapTxToTypedData(

2
go.mod
View File

@ -12,7 +12,7 @@ require (
github.com/cosmos/go-bip39 v1.0.0
github.com/cosmos/ibc-go/v5 v5.1.0
github.com/davecgh/go-spew v1.1.1
github.com/ethereum/go-ethereum v1.10.19
github.com/ethereum/go-ethereum v1.10.25
github.com/gogo/protobuf v1.3.3
github.com/golang/protobuf v1.5.2
github.com/gorilla/mux v1.8.0

12
go.sum
View File

@ -274,8 +274,10 @@ github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6
github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY=
github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI=
github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI=
github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM=
github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk=
@ -352,8 +354,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg=
github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0=
github.com/ethereum/go-ethereum v1.10.19 h1:EOR5JbL4MD5yeOqv8W2iC1s4NximrTjqFccUz8lyBRA=
github.com/ethereum/go-ethereum v1.10.19/go.mod h1:IJBNMtzKcNHPtllYihy6BL2IgK1u+32JriaTbdt4v+w=
github.com/ethereum/go-ethereum v1.10.25 h1:5dFrKJDnYf8L6/5o42abCE6a9yJm9cs4EJVRyYMr55s=
github.com/ethereum/go-ethereum v1.10.25/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0=
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A=
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk=
@ -952,8 +954,10 @@ github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs=
github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U=
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
@ -1065,8 +1069,10 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY
github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ=
github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
@ -1076,6 +1082,7 @@ github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPyS
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@ -1706,7 +1713,6 @@ gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJ
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0=
gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=

View File

@ -160,8 +160,8 @@ schema = 3
version = "v1.0.0"
hash = "sha256-k1DYvCqO3BKNcGEve/nMW0RxzMkK2tGfXbUbycqcVSo="
[mod."github.com/ethereum/go-ethereum"]
version = "v1.10.19"
hash = "sha256-7FPnTGcCb8Xd1QVR+6PmGTaHdTY1mm/8osFTW1JLuG8="
version = "v1.10.25"
hash = "sha256-tNlI2XyuTXjGuBoe5vlYDcaGN2Sub7yltVtI6TeLLSc="
[mod."github.com/felixge/httpsnoop"]
version = "v1.0.1"
hash = "sha256-TNXnnC/ZGNY9lInAcES1cBGqIdEljKuh5LH/khVFjVk="

View File

@ -1,4 +1,4 @@
{ lib, stdenv, buildGoModule, fetchFromGitHub, libobjc, IOKit }:
{ lib, stdenv, buildGoModule, fetchFromGitHub, libobjc, IOKit, nixosTests }:
let
# A list of binaries to put into separate outputs
@ -7,19 +7,18 @@ let
"clef"
];
in
buildGoModule rec {
in buildGoModule rec {
pname = "go-ethereum";
version = "1.10.19";
version = "1.10.25";
src = fetchFromGitHub {
owner = "ethereum";
repo = pname;
rev = "v${version}";
sha256 = "0f6n9rg42ph47mvykc9f0lf99yzwqy4jm7mlzyks4l6i6fl1g3q1";
sha256 = "sha256-mnf0kMfQEEQMricZJfyF7ZB/2F1dyPBx9iT2v/rGh1U=";
};
vendorSha256 = "1s5yfpk2yn7f3zwjl2fdrh6c63ki2b8rlmnlss27yxibsidaj0yd";
vendorSha256 = "sha256-Dj+xN8lr98LJyYr2FwJ7yUIJkUeUrr1fkcbj4hShJI0=";
doCheck = false;
@ -47,14 +46,19 @@ buildGoModule rec {
"cmd/utils"
];
# Following upstream: https://github.com/ethereum/go-ethereum/blob/v1.10.25/build/ci.go#L218
tags = [ "urfave_cli_no_docs" ];
# Fix for usb-related segmentation faults on darwin
propagatedBuildInputs =
lib.optionals stdenv.isDarwin [ libobjc IOKit ];
passthru.tests = { inherit (nixosTests) geth; };
meta = with lib; {
homepage = "https://geth.ethereum.org/";
description = "Official golang implementation of the Ethereum protocol";
license = with licenses; [ lgpl3Plus gpl3Plus ];
maintainers = with maintainers; [ adisbladis lionello RaghavSood ];
maintainers = with maintainers; [ adisbladis RaghavSood ];
};
}

View File

@ -224,5 +224,7 @@ message TraceConfig {
// enable memory capture
bool enable_memory = 11 [(gogoproto.jsontag) = "enableMemory"];
// enable return data capture
bool enable_return_data = 12 [(gogoproto.jsontag) = "enableReturnData"];
bool enable_return_data = 12 [ (gogoproto.jsontag) = "enableReturnData" ];
// tracer config
string tracer_json_config = 13 [ (gogoproto.jsontag) = "tracerConfig" ];
}

View File

@ -132,6 +132,7 @@ func (suite *BackendTestSuite) buildFormattedBlock(
uint64(header.Height),
uint64(0),
baseFee,
suite.backend.chainID,
)
suite.Require().NoError(err)
ethRPCTxs = []interface{}{rpcTx}

View File

@ -376,6 +376,7 @@ func (b *Backend) RPCBlockFromTendermintBlock(
uint64(block.Height),
uint64(txIndex),
baseFee,
b.chainID,
)
if err != nil {
b.logger.Debug("NewTransactionFromData for receipt failed", "hash", tx.Hash().Hex(), "error", err.Error())

View File

@ -1088,6 +1088,7 @@ func (suite *BackendTestSuite) TestGetEthBlockFromTendermint() {
uint64(header.Height),
uint64(0),
tc.baseFee,
suite.backend.chainID,
)
suite.Require().NoError(err)
ethRPCTxs = []interface{}{rpcTx}

View File

@ -153,11 +153,13 @@ func (b *Backend) FeeHistory(
}
blockEnd = int64(blockNumber)
}
userBlockCountInt := int64(userBlockCount)
maxBlockCount := int64(b.cfg.JSONRPC.FeeHistoryCap)
if userBlockCountInt > maxBlockCount {
return nil, fmt.Errorf("FeeHistory user block count %d higher than %d", userBlockCountInt, maxBlockCount)
}
blockStart := blockEnd - userBlockCountInt
if blockStart < 0 {
blockStart = 0
@ -173,6 +175,7 @@ func (b *Backend) FeeHistory(
for i := 0; i < int(blockCount); i++ {
reward[i] = make([]*hexutil.Big, rewardCount)
}
thisBaseFee := make([]*hexutil.Big, blockCount)
thisGasUsedRatio := make([]float64, blockCount)

View File

@ -1,6 +1,7 @@
package backend
import (
"errors"
"fmt"
"math/big"
@ -13,9 +14,8 @@ import (
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/signer/core/apitypes"
"github.com/evmos/ethermint/ethereum/eip712"
evmtypes "github.com/evmos/ethermint/x/evm/types"
"github.com/pkg/errors"
)
// SendTransaction sends transaction based on received args using Node's key to sign it
@ -27,6 +27,10 @@ func (b *Backend) SendTransaction(args evmtypes.TransactionArgs) (common.Hash, e
return common.Hash{}, fmt.Errorf("%s; %s", keystore.ErrNoMatch, err.Error())
}
if args.ChainID != nil && (b.chainID).Cmp((*big.Int)(args.ChainID)) != 0 {
return common.Hash{}, fmt.Errorf("chainId does not match node's (have=%v, want=%v)", args.ChainID, (*hexutil.Big)(b.chainID))
}
args, err = b.SetTxDefaults(args)
if err != nil {
return common.Hash{}, err
@ -131,7 +135,7 @@ func (b *Backend) SignTypedData(address common.Address, typedData apitypes.Typed
return nil, fmt.Errorf("%s; %s", keystore.ErrNoMatch, err.Error())
}
sigHash, err := eip712.ComputeTypedDataHash(typedData)
sigHash, _, err := apitypes.TypedDataAndHash(typedData)
if err != nil {
return nil, err
}

View File

@ -74,6 +74,7 @@ func (b *Backend) GetTransactionByHash(txHash common.Hash) (*rpctypes.RPCTransac
uint64(res.Height),
uint64(res.EthTxIndex),
baseFee,
b.chainID,
)
}
@ -102,6 +103,7 @@ func (b *Backend) getTransactionByHashPending(txHash common.Hash) (*rpctypes.RPC
uint64(0),
uint64(0),
nil,
b.chainID,
)
if err != nil {
return nil, err
@ -214,6 +216,7 @@ func (b *Backend) GetTransactionReceipt(hash common.Hash) (map[string]interface{
// sender and receiver (contract or EOA) addreses
"from": from,
"to": txData.GetTo(),
"type": hexutil.Uint(ethMsg.AsTransaction().Type()),
}
if logs == nil {
@ -386,5 +389,6 @@ func (b *Backend) GetTransactionByBlockAndIndex(block *tmrpctypes.ResultBlock, i
uint64(block.Block.Height),
uint64(idx),
baseFee,
b.chainID,
)
}

View File

@ -499,6 +499,7 @@ func (e *PublicAPI) GetPendingTransactions() ([]*rpctypes.RPCTransaction, error)
uint64(0),
uint64(0),
nil,
e.backend.ChainConfig().ChainID,
)
if err != nil {
return nil, err

View File

@ -33,6 +33,7 @@ const (
BlockParamEarliest = "earliest"
BlockParamLatest = "latest"
BlockParamFinalized = "finalized"
BlockParamSafe = "safe"
BlockParamPending = "pending"
)
@ -73,7 +74,7 @@ func (bn *BlockNumber) UnmarshalJSON(data []byte) error {
case BlockParamEarliest:
*bn = EthEarliestBlockNumber
return nil
case BlockParamLatest, BlockParamFinalized:
case BlockParamLatest, BlockParamFinalized, BlockParamSafe:
*bn = EthLatestBlockNumber
return nil
case BlockParamPending:

View File

@ -145,15 +145,17 @@ func NewTransactionFromMsg(
blockHash common.Hash,
blockNumber, index uint64,
baseFee *big.Int,
chainID *big.Int,
) (*RPCTransaction, error) {
tx := msg.AsTransaction()
return NewRPCTransaction(tx, blockHash, blockNumber, index, baseFee)
return NewRPCTransaction(tx, blockHash, blockNumber, index, baseFee, chainID)
}
// NewTransactionFromData returns a transaction that will serialize to the RPC
// representation, with the given location metadata set (if available).
func NewRPCTransaction(
tx *ethtypes.Transaction, blockHash common.Hash, blockNumber, index uint64, baseFee *big.Int,
chainID *big.Int,
) (*RPCTransaction, error) {
// Determine the signer. For replay-protected transactions, use the most permissive
// signer, because we assume that signers are backwards-compatible with old
@ -180,6 +182,7 @@ func NewRPCTransaction(
V: (*hexutil.Big)(v),
R: (*hexutil.Big)(r),
S: (*hexutil.Big)(s),
ChainID: (*hexutil.Big)(chainID),
}
if blockHash != (common.Hash{}) {
result.BlockHash = &blockHash

View File

@ -33,7 +33,7 @@ print(Account.from_mnemonic('$VALIDATOR1_MNEMONIC').key.hex().replace('0x',''))
cat > $tmpfile << EOF
$validator_key
EOF
geth --datadir $DATA account import $tmpfile --password $pwdfile
geth --datadir $DATA --password $pwdfile account import $tmpfile
# import community key
community_key=$(python -c """
@ -45,7 +45,7 @@ print(Account.from_mnemonic('$COMMUNITY_MNEMONIC').key.hex().replace('0x',''))
cat > $tmpfile << EOF
$community_key
EOF
geth --datadir $DATA account import $tmpfile --password $pwdfile
geth --datadir $DATA --password $pwdfile account import $tmpfile
rm $tmpfile

File diff suppressed because one or more lines are too long

View File

@ -43,7 +43,7 @@ def test_block_filter(cluster):
def test_event_log_filter_by_contract(cluster):
w3: Web3 = cluster.w3
contract = deploy_contract(w3, CONTRACTS["Greeter"])
contract, _ = deploy_contract(w3, CONTRACTS["Greeter"])
assert contract.caller.greet() == "Hello"
# Create new filter from contract
@ -81,7 +81,7 @@ def test_event_log_filter_by_contract(cluster):
def test_event_log_filter_by_address(cluster):
w3: Web3 = cluster.w3
contract = deploy_contract(w3, CONTRACTS["Greeter"])
contract, _ = deploy_contract(w3, CONTRACTS["Greeter"])
assert contract.caller.greet() == "Hello"
flt = w3.eth.filter({"address": contract.address})
@ -103,7 +103,7 @@ def test_event_log_filter_by_address(cluster):
def test_get_logs(cluster):
w3: Web3 = cluster.w3
contract = deploy_contract(w3, CONTRACTS["Greeter"])
contract, _ = deploy_contract(w3, CONTRACTS["Greeter"])
# without tx
assert w3.eth.get_logs({"address": contract.address}) == []

View File

@ -34,7 +34,7 @@ def test_pruned_node(pruned):
test basic json-rpc apis works in pruned node
"""
w3 = pruned.w3
erc20 = deploy_contract(
erc20, _ = deploy_contract(
w3,
CONTRACTS["TestERC20A"],
key=KEYS["validator"],

View File

@ -0,0 +1,52 @@
from web3 import Web3
from .expected_constants import (
EXPECTED_CALLTRACERS,
EXPECTED_CONTRACT_CREATE_TRACER,
EXPECTED_STRUCT_TRACER,
)
from .utils import (
ADDRS,
CONTRACTS,
KEYS,
deploy_contract,
send_transaction,
w3_wait_for_new_blocks,
)
def test_tracers(ethermint_rpc_ws):
w3: Web3 = ethermint_rpc_ws.w3
eth_rpc = w3.provider
gas_price = w3.eth.gas_price
tx = {"to": ADDRS["community"], "value": 100, "gasPrice": gas_price}
tx_hash = send_transaction(w3, tx, KEYS["validator"])["transactionHash"].hex()
tx_res = eth_rpc.make_request("debug_traceTransaction", [tx_hash])
assert tx_res["result"] == EXPECTED_STRUCT_TRACER, ""
tx_res = eth_rpc.make_request(
"debug_traceTransaction", [tx_hash, {"tracer": "callTracer"}]
)
assert tx_res["result"] == EXPECTED_CALLTRACERS, ""
tx_res = eth_rpc.make_request(
"debug_traceTransaction",
[tx_hash, {"tracer": "callTracer", "tracerConfig": "{'onlyTopCall':True}"}],
)
assert tx_res["result"] == EXPECTED_CALLTRACERS, ""
_, tx = deploy_contract(
w3,
CONTRACTS["TestERC20A"],
)
tx_hash = tx["transactionHash"].hex()
w3_wait_for_new_blocks(w3, 1)
tx_res = eth_rpc.make_request(
"debug_traceTransaction", [tx_hash, {"tracer": "callTracer"}]
)
tx_res["result"]["to"] = EXPECTED_CONTRACT_CREATE_TRACER["to"]
assert tx_res["result"] == EXPECTED_CONTRACT_CREATE_TRACER, ""

View File

@ -49,8 +49,7 @@ def get_blocks(ethermint_rpc_ws, geth, with_transactions):
with_transactions,
],
)
res, err = same_types(eth_rsp, geth_rsp)
assert res, err
compare_types(eth_rsp, geth_rsp)
# Get not existing block
make_same_rpc_calls(
@ -157,7 +156,7 @@ def test_balance(ethermint_rpc_ws, geth):
def deploy_and_wait(w3, number=1):
contract = deploy_contract(
contract, _ = deploy_contract(
w3,
CONTRACTS["TestERC20A"],
)
@ -179,8 +178,7 @@ def test_get_storage_at(ethermint_rpc_ws, geth):
contract = deploy_and_wait(w3)
res = eth_rpc.make_request("eth_getStorageAt", [contract.address, "0x0", "latest"])
res, err = same_types(res["result"], EXPECTED_GET_STORAGE_AT)
assert res, err
compare_types(res["result"], EXPECTED_GET_STORAGE_AT)
def send_tnx(w3, tx_value=10):
@ -215,16 +213,15 @@ def test_get_proof(ethermint_rpc_ws, geth):
proof = (eth_rpc.make_request(
method, [validator, ["0x0"], hex(res["blockNumber"])]
))["result"]
res, err = same_types(proof, EXPECTED_GET_PROOF)
assert res, err
compare_types(proof, EXPECTED_GET_PROOF["result"])
assert proof["accountProof"], EXPECTED_ACCOUNT_PROOF
assert proof["storageProof"][0]["proof"], EXPECTED_STORAGE_PROOF
proof = (geth_rpc.make_request(
_ = send_and_get_hash(w3)
proof = eth_rpc.make_request(
method, [validator, ["0x0"], "latest"]
))["result"]
res, err = same_types(proof, EXPECTED_GET_PROOF)
assert res, err
)
compare_types(proof, EXPECTED_GET_PROOF)
def test_get_code(ethermint_rpc_ws, geth):
@ -241,9 +238,8 @@ def test_get_code(ethermint_rpc_ws, geth):
# Do an ethereum transfer
contract = deploy_and_wait(w3)
code = eth_rpc.make_request("eth_getCode", [contract.address, "latest"])
expected = {"id": "4", "jsonrpc": "2.0", "result": "0x"}
res, err = same_types(code, expected)
assert res, err
expected = {"id": 4, "jsonrpc": "2.0", "result": "0x"}
compare_types(code, expected)
def test_get_block_transaction_count(ethermint_rpc_ws, geth):
@ -255,7 +251,7 @@ def test_get_block_transaction_count(ethermint_rpc_ws, geth):
)
make_same_rpc_calls(
eth_rpc, geth_rpc, "eth_getBlockTransactionCountByNumber", ["0x100"]
eth_rpc, geth_rpc, "eth_getBlockTransactionCountByNumber", ["0x1000"]
)
tx_hash = send_and_get_hash(w3)
@ -267,9 +263,8 @@ def test_get_block_transaction_count(ethermint_rpc_ws, geth):
"eth_getBlockTransactionCountByNumber", [block_number]
)
expected = {"id": "1", "jsonrpc": "2.0", "result": "0x1"}
res, err = same_types(block_res, expected)
assert res, err
expected = {"id": 1, "jsonrpc": "2.0", "result": "0x1"}
compare_types(block_res, expected)
make_same_rpc_calls(
eth_rpc,
@ -278,9 +273,8 @@ def test_get_block_transaction_count(ethermint_rpc_ws, geth):
["0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd"],
)
block_res = eth_rpc.make_request("eth_getBlockTransactionCountByHash", [block_hash])
expected = {"id": "1", "jsonrpc": "2.0", "result": "0x1"}
res, err = same_types(block_res, expected)
assert res, err
expected = {"id": 1, "jsonrpc": "2.0", "result": "0x1"}
compare_types(block_res, expected)
def test_get_transaction(ethermint_rpc_ws, geth):
@ -297,8 +291,8 @@ def test_get_transaction(ethermint_rpc_ws, geth):
tx_hash = send_and_get_hash(w3)
tx_res = eth_rpc.make_request("eth_getTransactionByHash", [tx_hash])
res, err = same_types(tx_res, EXPECTED_GET_TRANSACTION)
assert res, err
compare_types(EXPECTED_GET_TRANSACTION, tx_res)
def test_get_transaction_receipt(ethermint_rpc_ws, geth):
@ -315,8 +309,7 @@ def test_get_transaction_receipt(ethermint_rpc_ws, geth):
tx_hash = send_and_get_hash(w3)
tx_res = eth_rpc.make_request("eth_getTransactionReceipt", [tx_hash])
res, err = same_types(tx_res["result"], EXPECTED_GET_TRANSACTION_RECEIPT)
assert res, err
compare_types(tx_res, EXPECTED_GET_TRANSACTION_RECEIPT)
def test_fee_history(ethermint_rpc_ws, geth):
@ -327,10 +320,10 @@ def test_fee_history(ethermint_rpc_ws, geth):
make_same_rpc_calls(eth_rpc, geth_rpc, "eth_feeHistory", [4, "0x5000", [10, 90]])
fee_history = eth_rpc.make_request("eth_feeHistory", [4, "latest", [10, 90]])
_ = send_and_get_hash(w3)
fee_history = eth_rpc.make_request("eth_feeHistory", [4, "latest", [100]])
res, err = same_types(fee_history["result"], EXPECTED_FEE_HISTORY)
assert res, err
compare_types(fee_history, EXPECTED_FEE_HISTORY)
def test_estimate_gas(ethermint_rpc_ws, geth):
@ -345,11 +338,19 @@ def test_estimate_gas(ethermint_rpc_ws, geth):
make_same_rpc_calls(eth_rpc, geth_rpc, "eth_estimateGas", [{}])
def compare_types(actual, expected):
res, err = same_types(actual, expected)
if not res:
print(err)
print(actual)
print(expected)
assert res, err
def make_same_rpc_calls(rpc1, rpc2, method, params):
res1 = rpc1.make_request(method, params)
res2 = rpc2.make_request(method, params)
res, err = same_types(res1, res2)
assert res, err
compare_types(res1, res2)
def test_incomplete_send_transaction(ethermint_rpc_ws, geth):
@ -362,37 +363,45 @@ def test_incomplete_send_transaction(ethermint_rpc_ws, geth):
make_same_rpc_calls(eth_rpc, geth_rpc, "eth_sendTransaction", [tx])
def same_types(object_a, object_b):
if isinstance(object_a, dict):
if not isinstance(object_b, dict):
def same_types(given, expected):
if isinstance(given, dict):
if not isinstance(expected, dict):
return False, "A is dict, B is not"
keys = list(set(list(object_a.keys()) + list(object_b.keys())))
keys = list(set(list(given.keys()) + list(expected.keys())))
for key in keys:
if key in object_b and key in object_a:
if not same_types(object_a[key], object_b[key]):
return False, key + " key on dict are not of same type"
else:
return False, key + " key on json is not in both results"
if key not in expected or key not in given:
return False, key + " key not on both json"
res, err = same_types(given[key], expected[key])
if not res:
return res, key + " key failed. Error: " + err
return True, ""
elif isinstance(object_a, list):
if not isinstance(object_b, list):
elif isinstance(given, list):
if not isinstance(expected, list):
return False, "A is list, B is not"
if len(object_a) == 0 and len(object_b) == 0:
if len(given) == 0 and len(expected) == 0:
return True, ""
if len(object_a) > 0 and len(object_b) > 0:
return same_types(object_a[0], object_b[0])
if len(given) > 0 and len(expected) > 0:
return same_types(given[0], expected[0])
else:
return True
elif object_a is None and object_b is None:
return True, ""
elif type(object_a) is type(object_b):
elif given is None and expected is None:
return True, ""
elif type(given) is type(expected):
return True, ""
elif (
type(given) is int
and type(expected) is float
and given == 0
or type(expected) is int
and type(given) is float
and expected == 0
):
return True, ""
else:
return (
False,
"different types. A is type "
+ type(object_a).__name__
+ " B is type "
+ type(object_b).__name__,
"different types. Given object is type "
+ type(given).__name__
+ " expected object is type "
+ type(expected).__name__,
)

View File

@ -97,7 +97,7 @@ def test_cosmovisor_upgrade(custom_ethermint: Ethermint):
print("upgrade height", target_height)
w3 = custom_ethermint.w3
contract = deploy_contract(w3, CONTRACTS["TestERC20A"])
contract, _ = deploy_contract(w3, CONTRACTS["TestERC20A"])
old_height = w3.eth.block_number
old_balance = w3.eth.get_balance(ADDRS["validator"], block_identifier=old_height)
old_base_fee = w3.eth.get_block(old_height).baseFeePerGas

View File

@ -114,7 +114,7 @@ def wait_for_block_time(cli, t):
print("wait for block time", t)
while True:
now = isoparse((cli.status())["SyncInfo"]["latest_block_time"])
print("block time now:", now)
print("block time now: ", now)
if now >= t:
break
time.sleep(0.5)
@ -131,7 +131,7 @@ def deploy_contract(w3, jsonfile, args=(), key=KEYS["validator"]):
txreceipt = send_transaction(w3, tx, key)
assert txreceipt.status == 1
address = txreceipt.contractAddress
return w3.eth.contract(address=address, abi=info["abi"])
return w3.eth.contract(address=address, abi=info["abi"]), txreceipt
def fill_defaults(w3, tx):

View File

@ -420,7 +420,13 @@ func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*typ
txConfig.TxIndex++
}
result, _, err := k.traceTx(ctx, cfg, txConfig, signer, tx, req.TraceConfig, false)
var tracerConfig json.RawMessage
if req.TraceConfig != nil && req.TraceConfig.TracerJsonConfig != "" {
// ignore error. default to no traceConfig
_ = json.Unmarshal([]byte(req.TraceConfig.TracerJsonConfig), &tracerConfig)
}
result, _, err := k.traceTx(ctx, cfg, txConfig, signer, tx, req.TraceConfig, false, tracerConfig)
if err != nil {
// error will be returned with detail status from traceTx
return nil, err
@ -473,7 +479,7 @@ func (k Keeper) TraceBlock(c context.Context, req *types.QueryTraceBlockRequest)
ethTx := tx.AsTransaction()
txConfig.TxHash = ethTx.Hash()
txConfig.TxIndex = uint(i)
traceResult, logIndex, err := k.traceTx(ctx, cfg, txConfig, signer, ethTx, req.TraceConfig, true)
traceResult, logIndex, err := k.traceTx(ctx, cfg, txConfig, signer, ethTx, req.TraceConfig, true, nil)
if err != nil {
result.Error = err.Error()
continue
@ -502,6 +508,7 @@ func (k *Keeper) traceTx(
tx *ethtypes.Transaction,
traceConfig *types.TraceConfig,
commitMessage bool,
tracerJSONConfig json.RawMessage,
) (*interface{}, uint, error) {
// Assemble the structured logger or the JavaScript tracer
var (
@ -542,7 +549,7 @@ func (k *Keeper) traceTx(
}
if traceConfig.Tracer != "" {
if tracer, err = tracers.New(traceConfig.Tracer, tCtx); err != nil {
if tracer, err = tracers.New(traceConfig.Tracer, tCtx, tracerJSONConfig); err != nil {
return nil, 0, status.Error(codes.Internal, err.Error())
}
}

View File

@ -424,7 +424,8 @@ func (k *Keeper) ApplyMessageWithConfig(ctx sdk.Context,
return nil, errorsmod.Wrap(types.ErrGasOverflow, "apply message")
}
// refund gas
leftoverGas += GasToRefund(stateDB.GetRefund(), msg.Gas()-leftoverGas, refundQuotient)
temporaryGasUsed := msg.Gas() - leftoverGas
leftoverGas += GasToRefund(stateDB.GetRefund(), temporaryGasUsed, refundQuotient)
// EVM execution error needs to be available for the JSON-RPC client
var vmError string
@ -449,7 +450,7 @@ func (k *Keeper) ApplyMessageWithConfig(ctx sdk.Context,
if msg.Gas() < leftoverGas {
return nil, errorsmod.Wrapf(types.ErrGasOverflow, "message gas limit < leftover gas (%d < %d)", msg.Gas(), leftoverGas)
}
temporaryGasUsed := msg.Gas() - leftoverGas
gasUsed := sdk.MaxDec(minimumGasUsed, sdk.NewDec(int64(temporaryGasUsed))).TruncateInt().Uint64()
// reset leftoverGas, to be used by the tracer
leftoverGas = msg.Gas() - gasUsed

View File

@ -35,6 +35,8 @@ func (cc ChainConfig) EthereumConfig(chainID *big.Int) *params.ChainConfig {
ArrowGlacierBlock: getBlockValue(cc.ArrowGlacierBlock),
GrayGlacierBlock: getBlockValue(cc.GrayGlacierBlock),
MergeNetsplitBlock: getBlockValue(cc.MergeNetsplitBlock),
ShanghaiBlock: nil, // TODO: add shanghai block
CancunBlock: nil, // TODO: add cancun block
TerminalTotalDifficulty: nil,
Ethash: nil,
Clique: nil,

249
x/evm/types/evm.pb.go generated
View File

@ -550,6 +550,8 @@ type TraceConfig struct {
EnableMemory bool `protobuf:"varint,11,opt,name=enable_memory,json=enableMemory,proto3" json:"enableMemory"`
// enable return data capture
EnableReturnData bool `protobuf:"varint,12,opt,name=enable_return_data,json=enableReturnData,proto3" json:"enableReturnData"`
// tracer config
TracerJsonConfig string `protobuf:"bytes,13,opt,name=tracer_json_config,json=tracerJsonConfig,proto3" json:"tracerConfig"`
}
func (m *TraceConfig) Reset() { *m = TraceConfig{} }
@ -655,6 +657,13 @@ func (m *TraceConfig) GetEnableReturnData() bool {
return false
}
func (m *TraceConfig) GetTracerJsonConfig() string {
if m != nil {
return m.TracerJsonConfig
}
return ""
}
func init() {
proto.RegisterType((*Params)(nil), "ethermint.evm.v1.Params")
proto.RegisterType((*ChainConfig)(nil), "ethermint.evm.v1.ChainConfig")
@ -669,104 +678,105 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) }
var fileDescriptor_d21ecc92c8c8583e = []byte{
// 1538 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x5d, 0x4f, 0xdc, 0xca,
0x19, 0x06, 0x76, 0x01, 0xef, 0xec, 0xb2, 0x6b, 0x86, 0x85, 0x6e, 0x88, 0x8a, 0xa9, 0x2f, 0x2a,
0x2a, 0x25, 0x10, 0x88, 0x50, 0xa3, 0x44, 0x95, 0xca, 0x02, 0x49, 0xa0, 0x69, 0x8a, 0x06, 0xa2,
0x4a, 0x95, 0x2a, 0x6b, 0xd6, 0x9e, 0x18, 0x17, 0xdb, 0xb3, 0x9a, 0x19, 0x6f, 0x76, 0xdb, 0xfe,
0x80, 0x56, 0xbd, 0xe9, 0x4f, 0xe8, 0xcf, 0x89, 0xaa, 0x5e, 0xe4, 0xb2, 0x3a, 0x17, 0x56, 0x44,
0xee, 0xb8, 0xdc, 0x5f, 0x70, 0x34, 0x1f, 0xfb, 0x09, 0x3a, 0xe7, 0xc0, 0x95, 0xe7, 0x79, 0x3f,
0x9e, 0x67, 0x3e, 0x5e, 0xfb, 0x1d, 0x83, 0x75, 0x22, 0x2e, 0x09, 0x4b, 0xa2, 0x54, 0xec, 0x90,
0x4e, 0xb2, 0xd3, 0xd9, 0x95, 0x8f, 0xed, 0x36, 0xa3, 0x82, 0x42, 0x7b, 0xe8, 0xdb, 0x96, 0xc6,
0xce, 0xee, 0x7a, 0x3d, 0xa4, 0x21, 0x55, 0xce, 0x1d, 0x39, 0xd2, 0x71, 0xee, 0x3f, 0x0b, 0x60,
0xe1, 0x0c, 0x33, 0x9c, 0x70, 0xb8, 0x0b, 0x4a, 0xa4, 0x93, 0x78, 0x01, 0x49, 0x69, 0xd2, 0x98,
0xdd, 0x9c, 0xdd, 0x2a, 0x35, 0xeb, 0xfd, 0xdc, 0xb1, 0x7b, 0x38, 0x89, 0x5f, 0xba, 0x43, 0x97,
0x8b, 0x2c, 0xd2, 0x49, 0x8e, 0xe4, 0x10, 0xfe, 0x06, 0x2c, 0x91, 0x14, 0xb7, 0x62, 0xe2, 0xf9,
0x8c, 0x60, 0x41, 0x1a, 0x73, 0x9b, 0xb3, 0x5b, 0x56, 0xb3, 0xd1, 0xcf, 0x9d, 0xba, 0x49, 0x1b,
0x77, 0xbb, 0xa8, 0xa2, 0xf1, 0xa1, 0x82, 0xf0, 0xd7, 0xa0, 0x3c, 0xf0, 0xe3, 0x38, 0x6e, 0x14,
0x54, 0xf2, 0x5a, 0x3f, 0x77, 0xe0, 0x64, 0x32, 0x8e, 0x63, 0x17, 0x01, 0x93, 0x8a, 0xe3, 0x18,
0x1e, 0x00, 0x40, 0xba, 0x82, 0x61, 0x8f, 0x44, 0x6d, 0xde, 0x28, 0x6e, 0x16, 0xb6, 0x0a, 0x4d,
0xf7, 0x3a, 0x77, 0x4a, 0xc7, 0xd2, 0x7a, 0x7c, 0x72, 0xc6, 0xfb, 0xb9, 0xb3, 0x6c, 0x48, 0x86,
0x81, 0x2e, 0x2a, 0x29, 0x70, 0x1c, 0xb5, 0x39, 0xfc, 0x33, 0xa8, 0xf8, 0x97, 0x38, 0x4a, 0x3d,
0x9f, 0xa6, 0x1f, 0xa3, 0xb0, 0x31, 0xbf, 0x39, 0xbb, 0x55, 0xde, 0xfb, 0xf9, 0xf6, 0xf4, 0xbe,
0x6d, 0x1f, 0xca, 0xa8, 0x43, 0x15, 0xd4, 0x7c, 0xfc, 0x39, 0x77, 0x66, 0xfa, 0xb9, 0xb3, 0xa2,
0xa9, 0xc7, 0x09, 0x5c, 0x54, 0xf6, 0x47, 0x91, 0x70, 0x0f, 0xac, 0xe2, 0x38, 0xa6, 0x9f, 0xbc,
0x2c, 0x95, 0x1b, 0x4d, 0x7c, 0x41, 0x02, 0x4f, 0x74, 0x79, 0x63, 0x41, 0x2e, 0x12, 0xad, 0x28,
0xe7, 0x87, 0x91, 0xef, 0xa2, 0xcb, 0xdd, 0xff, 0xd5, 0x40, 0x79, 0x4c, 0x0d, 0x26, 0xa0, 0x76,
0x49, 0x13, 0xc2, 0x05, 0xc1, 0x81, 0xd7, 0x8a, 0xa9, 0x7f, 0x65, 0x8e, 0xe5, 0xe8, 0xbb, 0xdc,
0xf9, 0x65, 0x18, 0x89, 0xcb, 0xac, 0xb5, 0xed, 0xd3, 0x64, 0xc7, 0xa7, 0x3c, 0xa1, 0xdc, 0x3c,
0x9e, 0xf2, 0xe0, 0x6a, 0x47, 0xf4, 0xda, 0x84, 0x6f, 0x9f, 0xa4, 0xa2, 0x9f, 0x3b, 0x6b, 0x7a,
0xb2, 0x53, 0x54, 0x2e, 0xaa, 0x0e, 0x2d, 0x4d, 0x69, 0x80, 0x3d, 0x50, 0x0d, 0x30, 0xf5, 0x3e,
0x52, 0x76, 0x65, 0xd4, 0xe6, 0x94, 0xda, 0xf9, 0x4f, 0x57, 0xbb, 0xce, 0x9d, 0xca, 0xd1, 0xc1,
0x1f, 0x5e, 0x53, 0x76, 0xa5, 0x38, 0xfb, 0xb9, 0xb3, 0xaa, 0xd5, 0x27, 0x99, 0x5d, 0x54, 0x09,
0x30, 0x1d, 0x86, 0xc1, 0x3f, 0x02, 0x7b, 0x18, 0xc0, 0xb3, 0x76, 0x9b, 0x32, 0x61, 0xaa, 0xe1,
0xe9, 0x75, 0xee, 0x54, 0x0d, 0xe5, 0xb9, 0xf6, 0xf4, 0x73, 0xe7, 0x67, 0x53, 0xa4, 0x26, 0xc7,
0x45, 0x55, 0x43, 0x6b, 0x42, 0x21, 0x07, 0x15, 0x12, 0xb5, 0x77, 0xf7, 0x9f, 0x99, 0x15, 0x15,
0xd5, 0x8a, 0xce, 0xee, 0xb5, 0xa2, 0xf2, 0xf1, 0xc9, 0xd9, 0xee, 0xfe, 0xb3, 0xc1, 0x82, 0xcc,
0xd9, 0x8f, 0xd3, 0xba, 0xa8, 0xac, 0xa1, 0x5e, 0xcd, 0x09, 0x30, 0xd0, 0xbb, 0xc4, 0xfc, 0x52,
0x55, 0x56, 0xa9, 0xb9, 0x75, 0x9d, 0x3b, 0x40, 0x33, 0xbd, 0xc5, 0xfc, 0x72, 0x74, 0x2e, 0xad,
0xde, 0x5f, 0x71, 0x2a, 0xa2, 0x2c, 0x19, 0x70, 0x01, 0x9d, 0x2c, 0xa3, 0x86, 0xf3, 0xdf, 0x37,
0xf3, 0x5f, 0x78, 0xf0, 0xfc, 0xf7, 0xef, 0x9a, 0xff, 0xfe, 0xe4, 0xfc, 0x75, 0xcc, 0x50, 0xf4,
0x85, 0x11, 0x5d, 0x7c, 0xb0, 0xe8, 0x8b, 0xbb, 0x44, 0x5f, 0x4c, 0x8a, 0xea, 0x18, 0x59, 0xec,
0x53, 0x3b, 0xd1, 0xb0, 0x1e, 0x5e, 0xec, 0xb7, 0x36, 0xb5, 0x3a, 0xb4, 0x68, 0xb9, 0xbf, 0x83,
0xba, 0x4f, 0x53, 0x2e, 0xa4, 0x2d, 0xa5, 0xed, 0x98, 0x18, 0xcd, 0x92, 0xd2, 0x3c, 0xb9, 0x97,
0xe6, 0x63, 0xf3, 0x35, 0xb8, 0x83, 0xcf, 0x45, 0x2b, 0x93, 0x66, 0xad, 0xde, 0x06, 0x76, 0x9b,
0x08, 0xc2, 0x78, 0x2b, 0x63, 0xa1, 0x51, 0x06, 0x4a, 0xf9, 0xf8, 0x5e, 0xca, 0xe6, 0x3d, 0x98,
0xe6, 0x72, 0x51, 0x6d, 0x64, 0xd2, 0x8a, 0x7f, 0x01, 0xd5, 0x48, 0x4e, 0xa3, 0x95, 0xc5, 0x46,
0xaf, 0xac, 0xf4, 0x0e, 0xef, 0xa5, 0x67, 0x5e, 0xe6, 0x49, 0x26, 0x17, 0x2d, 0x0d, 0x0c, 0x5a,
0x2b, 0x03, 0x30, 0xc9, 0x22, 0xe6, 0x85, 0x31, 0xf6, 0x23, 0xc2, 0x8c, 0x5e, 0x45, 0xe9, 0xbd,
0xb9, 0x97, 0xde, 0x23, 0xad, 0x77, 0x9b, 0xcd, 0x45, 0xb6, 0x34, 0xbe, 0xd1, 0x36, 0x2d, 0x1b,
0x80, 0x4a, 0x8b, 0xb0, 0x38, 0x4a, 0x8d, 0xe0, 0x92, 0x12, 0x3c, 0xb8, 0x97, 0xa0, 0xa9, 0xd3,
0x71, 0x1e, 0x17, 0x95, 0x35, 0x1c, 0xaa, 0xc4, 0x34, 0x0d, 0xe8, 0x40, 0x65, 0xf9, 0xe1, 0x2a,
0xe3, 0x3c, 0x2e, 0x2a, 0x6b, 0xa8, 0x55, 0xba, 0x60, 0x05, 0x33, 0x46, 0x3f, 0x4d, 0xed, 0x21,
0x54, 0x62, 0x6f, 0xef, 0x25, 0xb6, 0xae, 0xc5, 0xee, 0xa0, 0x73, 0xd1, 0xb2, 0xb2, 0x4e, 0xec,
0x62, 0x06, 0x60, 0xc8, 0x70, 0x6f, 0x4a, 0xb8, 0xfe, 0xf0, 0xc3, 0xbb, 0xcd, 0xe6, 0x22, 0x5b,
0x1a, 0x27, 0x64, 0xff, 0x06, 0xea, 0x09, 0x61, 0x21, 0xf1, 0x52, 0x22, 0x78, 0x3b, 0x8e, 0x84,
0x11, 0x5e, 0x7d, 0xf8, 0xfb, 0x78, 0x17, 0x9f, 0x8b, 0xa0, 0x32, 0xbf, 0x37, 0x56, 0x25, 0x7e,
0x5a, 0xb4, 0xaa, 0x76, 0xed, 0xb4, 0x68, 0xd5, 0x6c, 0xfb, 0xb4, 0x68, 0xd9, 0xf6, 0xf2, 0x69,
0xd1, 0x5a, 0xb1, 0xeb, 0x68, 0xa9, 0x47, 0x63, 0xea, 0x75, 0x9e, 0xeb, 0x5c, 0x54, 0x26, 0x9f,
0x30, 0x37, 0x5f, 0x14, 0x54, 0xf5, 0xb1, 0xc0, 0x71, 0x8f, 0x1b, 0x62, 0x64, 0x6b, 0xb9, 0xb1,
0x1e, 0xb7, 0x03, 0xe6, 0xcf, 0x85, 0xbc, 0xe6, 0xd8, 0xa0, 0x70, 0x45, 0x7a, 0xba, 0x77, 0x23,
0x39, 0x84, 0x75, 0x30, 0xdf, 0xc1, 0x71, 0xa6, 0xef, 0x4b, 0x25, 0xa4, 0x81, 0x7b, 0x06, 0x6a,
0x17, 0x0c, 0xa7, 0x1c, 0xfb, 0x22, 0xa2, 0xe9, 0x3b, 0x1a, 0x72, 0x08, 0x41, 0x51, 0xf5, 0x10,
0x9d, 0xab, 0xc6, 0xf0, 0x57, 0xa0, 0x18, 0xd3, 0x90, 0x37, 0xe6, 0x36, 0x0b, 0x5b, 0xe5, 0xbd,
0xd5, 0xdb, 0x37, 0x96, 0x77, 0x34, 0x44, 0x2a, 0xc4, 0xfd, 0xef, 0x1c, 0x28, 0xbc, 0xa3, 0x21,
0x6c, 0x80, 0x45, 0x1c, 0x04, 0x8c, 0x70, 0x6e, 0x98, 0x06, 0x10, 0xae, 0x81, 0x05, 0x41, 0xdb,
0x91, 0xaf, 0xe9, 0x4a, 0xc8, 0x20, 0x29, 0x1c, 0x60, 0x81, 0x55, 0x17, 0xae, 0x20, 0x35, 0x86,
0x7b, 0xa0, 0xa2, 0x56, 0xe6, 0xa5, 0x59, 0xd2, 0x22, 0x4c, 0x35, 0xd3, 0x62, 0xb3, 0x76, 0x93,
0x3b, 0x65, 0x65, 0x7f, 0xaf, 0xcc, 0x68, 0x1c, 0xc0, 0x27, 0x60, 0x51, 0x74, 0xc7, 0xfb, 0xe0,
0xca, 0x4d, 0xee, 0xd4, 0xc4, 0x68, 0x99, 0xb2, 0xcd, 0xa1, 0x05, 0xd1, 0x55, 0xed, 0x6e, 0x07,
0x58, 0xa2, 0xeb, 0x45, 0x69, 0x40, 0xba, 0xaa, 0xd5, 0x15, 0x9b, 0xf5, 0x9b, 0xdc, 0xb1, 0xc7,
0xc2, 0x4f, 0xa4, 0x0f, 0x2d, 0x8a, 0xae, 0x1a, 0xc0, 0x27, 0x00, 0xe8, 0x29, 0x29, 0x05, 0xdd,
0xa8, 0x96, 0x6e, 0x72, 0xa7, 0xa4, 0xac, 0x8a, 0x7b, 0x34, 0x84, 0x2e, 0x98, 0xd7, 0xdc, 0x96,
0xe2, 0xae, 0xdc, 0xe4, 0x8e, 0x15, 0xd3, 0x50, 0x73, 0x6a, 0x97, 0xdc, 0x2a, 0x46, 0x12, 0xda,
0x21, 0x81, 0xea, 0x05, 0x16, 0x1a, 0x40, 0xf7, 0x5f, 0x73, 0xc0, 0xba, 0xe8, 0x22, 0xc2, 0xb3,
0x58, 0xc0, 0xd7, 0xc0, 0xf6, 0x69, 0x2a, 0x18, 0xf6, 0x85, 0x37, 0xb1, 0xb5, 0xcd, 0xc7, 0xa3,
0xef, 0xf2, 0x74, 0x84, 0x8b, 0x6a, 0x03, 0xd3, 0x81, 0xd9, 0xff, 0x3a, 0x98, 0x6f, 0xc5, 0x94,
0x26, 0xaa, 0x12, 0x2a, 0x48, 0x03, 0x88, 0xd4, 0xae, 0xa9, 0x53, 0x2e, 0xa8, 0x7b, 0xe9, 0x2f,
0x6e, 0x9f, 0xf2, 0x54, 0xa9, 0x34, 0xd7, 0xcc, 0xdd, 0xb4, 0xaa, 0xb5, 0x4d, 0xbe, 0x2b, 0xf7,
0x56, 0x95, 0x92, 0x0d, 0x0a, 0x8c, 0x08, 0x75, 0x68, 0x15, 0x24, 0x87, 0x70, 0x1d, 0x58, 0x8c,
0x74, 0x08, 0x13, 0x24, 0x50, 0x87, 0x63, 0xa1, 0x21, 0x86, 0x8f, 0x80, 0x15, 0x62, 0xee, 0x65,
0x9c, 0x04, 0xfa, 0x24, 0xd0, 0x62, 0x88, 0xf9, 0x07, 0x4e, 0x82, 0x97, 0xc5, 0x7f, 0xfc, 0xc7,
0x99, 0x71, 0x31, 0x28, 0x1f, 0xf8, 0x3e, 0xe1, 0xfc, 0x22, 0x6b, 0xc7, 0xe4, 0x07, 0x2a, 0x6c,
0x0f, 0x54, 0xb8, 0xa0, 0x0c, 0x87, 0xc4, 0xbb, 0x22, 0x3d, 0x53, 0x67, 0xba, 0x6a, 0x8c, 0xfd,
0x77, 0xa4, 0xc7, 0xd1, 0x38, 0x30, 0x12, 0x5f, 0x0b, 0xa0, 0x7c, 0xc1, 0xb0, 0x4f, 0xcc, 0x7d,
0x58, 0xd6, 0xaa, 0x84, 0xcc, 0x48, 0x18, 0x24, 0xb5, 0x45, 0x94, 0x10, 0x9a, 0x09, 0xf3, 0x3e,
0x0d, 0xa0, 0xcc, 0x60, 0x84, 0x74, 0x89, 0xaf, 0xb6, 0xb1, 0x88, 0x0c, 0x82, 0xfb, 0x60, 0x29,
0x88, 0xb8, 0xfa, 0xb9, 0xe0, 0x02, 0xfb, 0x57, 0x7a, 0xf9, 0x4d, 0xfb, 0x26, 0x77, 0x2a, 0xc6,
0x71, 0x2e, 0xed, 0x68, 0x02, 0xc1, 0x57, 0xa0, 0x36, 0x4a, 0x53, 0xb3, 0xd5, 0xd7, 0xf9, 0x26,
0xbc, 0xc9, 0x9d, 0xea, 0x30, 0x54, 0x79, 0xd0, 0x14, 0x96, 0x27, 0x1d, 0x90, 0x56, 0x16, 0xaa,
0xe2, 0xb3, 0x90, 0x06, 0xd2, 0x1a, 0x47, 0x49, 0x24, 0x54, 0xb1, 0xcd, 0x23, 0x0d, 0xe0, 0x2b,
0x50, 0xa2, 0x1d, 0xc2, 0x58, 0x14, 0x10, 0xae, 0x2e, 0x06, 0x3f, 0xf6, 0x67, 0x82, 0x46, 0xf1,
0x72, 0x71, 0xe6, 0xc7, 0x29, 0x21, 0x09, 0x65, 0x3d, 0xd5, 0xe9, 0xcd, 0xe2, 0xb4, 0xe3, 0xf7,
0xca, 0x8e, 0x26, 0x10, 0x6c, 0x02, 0x68, 0xd2, 0x18, 0x11, 0x19, 0x4b, 0x3d, 0xf5, 0xfe, 0x57,
0x54, 0xae, 0x7a, 0x0b, 0xb5, 0x17, 0x29, 0xe7, 0x11, 0x16, 0x18, 0xdd, 0xb2, 0x9c, 0x16, 0xad,
0xa2, 0x3d, 0x7f, 0x5a, 0xb4, 0x16, 0x6d, 0x6b, 0xb8, 0x7e, 0x33, 0x0b, 0xb4, 0x32, 0xc0, 0x63,
0xf4, 0xcd, 0xdf, 0x7e, 0xbe, 0xde, 0x98, 0xfd, 0x72, 0xbd, 0x31, 0xfb, 0xf5, 0x7a, 0x63, 0xf6,
0xdf, 0xdf, 0x36, 0x66, 0xbe, 0x7c, 0xdb, 0x98, 0xf9, 0xff, 0xb7, 0x8d, 0x99, 0x3f, 0x8d, 0x7f,
0xee, 0x49, 0x47, 0x7e, 0xed, 0x47, 0x7f, 0xbb, 0x5d, 0xf5, 0xbf, 0xab, 0x3e, 0xf9, 0xad, 0x05,
0xf5, 0x1f, 0xfb, 0xfc, 0xfb, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x44, 0xf1, 0x35, 0x0d, 0x0f,
0x00, 0x00,
// 1565 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdd, 0x4e, 0x23, 0xc9,
0x15, 0x06, 0xdc, 0x40, 0xbb, 0x6c, 0xec, 0xa6, 0x30, 0xc4, 0xcb, 0x28, 0x34, 0xe9, 0x8b, 0x88,
0x48, 0xbb, 0xb0, 0xb0, 0x42, 0x19, 0xed, 0x2a, 0x51, 0x30, 0xb0, 0x33, 0x90, 0xc9, 0x04, 0x15,
0x8c, 0x22, 0x45, 0x8a, 0x5a, 0xe5, 0xee, 0x9a, 0xa6, 0x87, 0xee, 0x2e, 0xab, 0xaa, 0xda, 0x63,
0x27, 0x79, 0x80, 0x44, 0xb9, 0xc9, 0x23, 0xcc, 0xe3, 0x8c, 0xa2, 0x5c, 0xcc, 0x65, 0x94, 0x8b,
0x56, 0xc4, 0xdc, 0x71, 0xe9, 0x27, 0x88, 0xea, 0xc7, 0xbf, 0xa0, 0x64, 0xe1, 0xca, 0xf5, 0x9d,
0x73, 0xea, 0xfb, 0xaa, 0x4e, 0x9d, 0xf6, 0xa9, 0x02, 0x9b, 0x44, 0x5c, 0x13, 0x96, 0xc6, 0x99,
0xd8, 0x23, 0xdd, 0x74, 0xaf, 0xbb, 0x2f, 0x7f, 0x76, 0x3b, 0x8c, 0x0a, 0x0a, 0x9d, 0x91, 0x6f,
0x57, 0x1a, 0xbb, 0xfb, 0x9b, 0x8d, 0x88, 0x46, 0x54, 0x39, 0xf7, 0xe4, 0x48, 0xc7, 0x79, 0x7f,
0x2d, 0x81, 0xa5, 0x0b, 0xcc, 0x70, 0xca, 0xe1, 0x3e, 0x28, 0x93, 0x6e, 0xea, 0x87, 0x24, 0xa3,
0x69, 0x73, 0x7e, 0x7b, 0x7e, 0xa7, 0xdc, 0x6a, 0x0c, 0x0a, 0xd7, 0xe9, 0xe3, 0x34, 0xf9, 0xd6,
0x1b, 0xb9, 0x3c, 0x64, 0x93, 0x6e, 0x7a, 0x22, 0x87, 0xf0, 0x17, 0x60, 0x85, 0x64, 0xb8, 0x9d,
0x10, 0x3f, 0x60, 0x04, 0x0b, 0xd2, 0x5c, 0xd8, 0x9e, 0xdf, 0xb1, 0x5b, 0xcd, 0x41, 0xe1, 0x36,
0xcc, 0xb4, 0x49, 0xb7, 0x87, 0xaa, 0x1a, 0x1f, 0x2b, 0x08, 0x7f, 0x0e, 0x2a, 0x43, 0x3f, 0x4e,
0x92, 0x66, 0x49, 0x4d, 0xde, 0x18, 0x14, 0x2e, 0x9c, 0x9e, 0x8c, 0x93, 0xc4, 0x43, 0xc0, 0x4c,
0xc5, 0x49, 0x02, 0x8f, 0x00, 0x20, 0x3d, 0xc1, 0xb0, 0x4f, 0xe2, 0x0e, 0x6f, 0x5a, 0xdb, 0xa5,
0x9d, 0x52, 0xcb, 0xbb, 0x2d, 0xdc, 0xf2, 0xa9, 0xb4, 0x9e, 0x9e, 0x5d, 0xf0, 0x41, 0xe1, 0xae,
0x1a, 0x92, 0x51, 0xa0, 0x87, 0xca, 0x0a, 0x9c, 0xc6, 0x1d, 0x0e, 0xff, 0x00, 0xaa, 0xc1, 0x35,
0x8e, 0x33, 0x3f, 0xa0, 0xd9, 0xdb, 0x38, 0x6a, 0x2e, 0x6e, 0xcf, 0xef, 0x54, 0x0e, 0x7e, 0xbc,
0x3b, 0x9b, 0xb7, 0xdd, 0x63, 0x19, 0x75, 0xac, 0x82, 0x5a, 0xcf, 0x3e, 0x16, 0xee, 0xdc, 0xa0,
0x70, 0xd7, 0x34, 0xf5, 0x24, 0x81, 0x87, 0x2a, 0xc1, 0x38, 0x12, 0x1e, 0x80, 0x75, 0x9c, 0x24,
0xf4, 0xbd, 0x9f, 0x67, 0x32, 0xd1, 0x24, 0x10, 0x24, 0xf4, 0x45, 0x8f, 0x37, 0x97, 0xe4, 0x26,
0xd1, 0x9a, 0x72, 0xbe, 0x19, 0xfb, 0xae, 0x7a, 0xdc, 0xfb, 0x67, 0x1d, 0x54, 0x26, 0xd4, 0x60,
0x0a, 0xea, 0xd7, 0x34, 0x25, 0x5c, 0x10, 0x1c, 0xfa, 0xed, 0x84, 0x06, 0x37, 0xe6, 0x58, 0x4e,
0xfe, 0x5d, 0xb8, 0x3f, 0x8d, 0x62, 0x71, 0x9d, 0xb7, 0x77, 0x03, 0x9a, 0xee, 0x05, 0x94, 0xa7,
0x94, 0x9b, 0x9f, 0xaf, 0x78, 0x78, 0xb3, 0x27, 0xfa, 0x1d, 0xc2, 0x77, 0xcf, 0x32, 0x31, 0x28,
0xdc, 0x0d, 0xbd, 0xd8, 0x19, 0x2a, 0x0f, 0xd5, 0x46, 0x96, 0x96, 0x34, 0xc0, 0x3e, 0xa8, 0x85,
0x98, 0xfa, 0x6f, 0x29, 0xbb, 0x31, 0x6a, 0x0b, 0x4a, 0xed, 0xf2, 0x87, 0xab, 0xdd, 0x16, 0x6e,
0xf5, 0xe4, 0xe8, 0xb7, 0xdf, 0x53, 0x76, 0xa3, 0x38, 0x07, 0x85, 0xbb, 0xae, 0xd5, 0xa7, 0x99,
0x3d, 0x54, 0x0d, 0x31, 0x1d, 0x85, 0xc1, 0xdf, 0x01, 0x67, 0x14, 0xc0, 0xf3, 0x4e, 0x87, 0x32,
0x61, 0xaa, 0xe1, 0xab, 0xdb, 0xc2, 0xad, 0x19, 0xca, 0x4b, 0xed, 0x19, 0x14, 0xee, 0x8f, 0x66,
0x48, 0xcd, 0x1c, 0x0f, 0xd5, 0x0c, 0xad, 0x09, 0x85, 0x1c, 0x54, 0x49, 0xdc, 0xd9, 0x3f, 0xfc,
0xda, 0xec, 0xc8, 0x52, 0x3b, 0xba, 0x78, 0xd4, 0x8e, 0x2a, 0xa7, 0x67, 0x17, 0xfb, 0x87, 0x5f,
0x0f, 0x37, 0x64, 0xce, 0x7e, 0x92, 0xd6, 0x43, 0x15, 0x0d, 0xf5, 0x6e, 0xce, 0x80, 0x81, 0xfe,
0x35, 0xe6, 0xd7, 0xaa, 0xb2, 0xca, 0xad, 0x9d, 0xdb, 0xc2, 0x05, 0x9a, 0xe9, 0x25, 0xe6, 0xd7,
0xe3, 0x73, 0x69, 0xf7, 0xff, 0x88, 0x33, 0x11, 0xe7, 0xe9, 0x90, 0x0b, 0xe8, 0xc9, 0x32, 0x6a,
0xb4, 0xfe, 0x43, 0xb3, 0xfe, 0xa5, 0x27, 0xaf, 0xff, 0xf0, 0xa1, 0xf5, 0x1f, 0x4e, 0xaf, 0x5f,
0xc7, 0x8c, 0x44, 0x9f, 0x1b, 0xd1, 0xe5, 0x27, 0x8b, 0x3e, 0x7f, 0x48, 0xf4, 0xf9, 0xb4, 0xa8,
0x8e, 0x91, 0xc5, 0x3e, 0x93, 0x89, 0xa6, 0xfd, 0xf4, 0x62, 0xbf, 0x97, 0xd4, 0xda, 0xc8, 0xa2,
0xe5, 0xfe, 0x0c, 0x1a, 0x01, 0xcd, 0xb8, 0x90, 0xb6, 0x8c, 0x76, 0x12, 0x62, 0x34, 0xcb, 0x4a,
0xf3, 0xec, 0x51, 0x9a, 0xcf, 0xcc, 0xbf, 0xc1, 0x03, 0x7c, 0x1e, 0x5a, 0x9b, 0x36, 0x6b, 0xf5,
0x0e, 0x70, 0x3a, 0x44, 0x10, 0xc6, 0xdb, 0x39, 0x8b, 0x8c, 0x32, 0x50, 0xca, 0xa7, 0x8f, 0x52,
0x36, 0xdf, 0xc1, 0x2c, 0x97, 0x87, 0xea, 0x63, 0x93, 0x56, 0x7c, 0x07, 0x6a, 0xb1, 0x5c, 0x46,
0x3b, 0x4f, 0x8c, 0x5e, 0x45, 0xe9, 0x1d, 0x3f, 0x4a, 0xcf, 0x7c, 0xcc, 0xd3, 0x4c, 0x1e, 0x5a,
0x19, 0x1a, 0xb4, 0x56, 0x0e, 0x60, 0x9a, 0xc7, 0xcc, 0x8f, 0x12, 0x1c, 0xc4, 0x84, 0x19, 0xbd,
0xaa, 0xd2, 0x7b, 0xf1, 0x28, 0xbd, 0x2f, 0xb4, 0xde, 0x7d, 0x36, 0x0f, 0x39, 0xd2, 0xf8, 0x42,
0xdb, 0xb4, 0x6c, 0x08, 0xaa, 0x6d, 0xc2, 0x92, 0x38, 0x33, 0x82, 0x2b, 0x4a, 0xf0, 0xe8, 0x51,
0x82, 0xa6, 0x4e, 0x27, 0x79, 0x3c, 0x54, 0xd1, 0x70, 0xa4, 0x92, 0xd0, 0x2c, 0xa4, 0x43, 0x95,
0xd5, 0xa7, 0xab, 0x4c, 0xf2, 0x78, 0xa8, 0xa2, 0xa1, 0x56, 0xe9, 0x81, 0x35, 0xcc, 0x18, 0x7d,
0x3f, 0x93, 0x43, 0xa8, 0xc4, 0x5e, 0x3e, 0x4a, 0x6c, 0x53, 0x8b, 0x3d, 0x40, 0xe7, 0xa1, 0x55,
0x65, 0x9d, 0xca, 0x62, 0x0e, 0x60, 0xc4, 0x70, 0x7f, 0x46, 0xb8, 0xf1, 0xf4, 0xc3, 0xbb, 0xcf,
0xe6, 0x21, 0x47, 0x1a, 0xa7, 0x64, 0xff, 0x04, 0x1a, 0x29, 0x61, 0x11, 0xf1, 0x33, 0x22, 0x78,
0x27, 0x89, 0x85, 0x11, 0x5e, 0x7f, 0xfa, 0xf7, 0xf8, 0x10, 0x9f, 0x87, 0xa0, 0x32, 0xbf, 0x36,
0x56, 0x25, 0x7e, 0x6e, 0xd9, 0x35, 0xa7, 0x7e, 0x6e, 0xd9, 0x75, 0xc7, 0x39, 0xb7, 0x6c, 0xc7,
0x59, 0x3d, 0xb7, 0xec, 0x35, 0xa7, 0x81, 0x56, 0xfa, 0x34, 0xa1, 0x7e, 0xf7, 0x1b, 0x3d, 0x17,
0x55, 0xc8, 0x7b, 0xcc, 0xcd, 0x3f, 0x0a, 0xaa, 0x05, 0x58, 0xe0, 0xa4, 0xcf, 0x0d, 0x31, 0x72,
0xb4, 0xdc, 0x44, 0x8f, 0xdb, 0x03, 0x8b, 0x97, 0x42, 0x5e, 0x73, 0x1c, 0x50, 0xba, 0x21, 0x7d,
0xdd, 0xbb, 0x91, 0x1c, 0xc2, 0x06, 0x58, 0xec, 0xe2, 0x24, 0xd7, 0xf7, 0xa5, 0x32, 0xd2, 0xc0,
0xbb, 0x00, 0xf5, 0x2b, 0x86, 0x33, 0x8e, 0x03, 0x11, 0xd3, 0xec, 0x15, 0x8d, 0x38, 0x84, 0xc0,
0x52, 0x3d, 0x44, 0xcf, 0x55, 0x63, 0xf8, 0x33, 0x60, 0x25, 0x34, 0xe2, 0xcd, 0x85, 0xed, 0xd2,
0x4e, 0xe5, 0x60, 0xfd, 0xfe, 0x8d, 0xe5, 0x15, 0x8d, 0x90, 0x0a, 0xf1, 0xfe, 0xb1, 0x00, 0x4a,
0xaf, 0x68, 0x04, 0x9b, 0x60, 0x19, 0x87, 0x21, 0x23, 0x9c, 0x1b, 0xa6, 0x21, 0x84, 0x1b, 0x60,
0x49, 0xd0, 0x4e, 0x1c, 0x68, 0xba, 0x32, 0x32, 0x48, 0x0a, 0x87, 0x58, 0x60, 0xd5, 0x85, 0xab,
0x48, 0x8d, 0xe1, 0x01, 0xa8, 0xaa, 0x9d, 0xf9, 0x59, 0x9e, 0xb6, 0x09, 0x53, 0xcd, 0xd4, 0x6a,
0xd5, 0xef, 0x0a, 0xb7, 0xa2, 0xec, 0xaf, 0x95, 0x19, 0x4d, 0x02, 0xf8, 0x25, 0x58, 0x16, 0xbd,
0xc9, 0x3e, 0xb8, 0x76, 0x57, 0xb8, 0x75, 0x31, 0xde, 0xa6, 0x6c, 0x73, 0x68, 0x49, 0xf4, 0x54,
0xbb, 0xdb, 0x03, 0xb6, 0xe8, 0xf9, 0x71, 0x16, 0x92, 0x9e, 0x6a, 0x75, 0x56, 0xab, 0x71, 0x57,
0xb8, 0xce, 0x44, 0xf8, 0x99, 0xf4, 0xa1, 0x65, 0xd1, 0x53, 0x03, 0xf8, 0x25, 0x00, 0x7a, 0x49,
0x4a, 0x41, 0x37, 0xaa, 0x95, 0xbb, 0xc2, 0x2d, 0x2b, 0xab, 0xe2, 0x1e, 0x0f, 0xa1, 0x07, 0x16,
0x35, 0xb7, 0xad, 0xb8, 0xab, 0x77, 0x85, 0x6b, 0x27, 0x34, 0xd2, 0x9c, 0xda, 0x25, 0x53, 0xc5,
0x48, 0x4a, 0xbb, 0x24, 0x54, 0xbd, 0xc0, 0x46, 0x43, 0xe8, 0xfd, 0x6d, 0x01, 0xd8, 0x57, 0x3d,
0x44, 0x78, 0x9e, 0x08, 0xf8, 0x3d, 0x70, 0x02, 0x9a, 0x09, 0x86, 0x03, 0xe1, 0x4f, 0xa5, 0xb6,
0xf5, 0x6c, 0xfc, 0xbf, 0x3c, 0x1b, 0xe1, 0xa1, 0xfa, 0xd0, 0x74, 0x64, 0xf2, 0xdf, 0x00, 0x8b,
0xed, 0x84, 0xd2, 0x54, 0x55, 0x42, 0x15, 0x69, 0x00, 0x91, 0xca, 0x9a, 0x3a, 0xe5, 0x92, 0xba,
0x97, 0xfe, 0xe4, 0xfe, 0x29, 0xcf, 0x94, 0x4a, 0x6b, 0xc3, 0xdc, 0x4d, 0x6b, 0x5a, 0xdb, 0xcc,
0xf7, 0x64, 0x6e, 0x55, 0x29, 0x39, 0xa0, 0xc4, 0x88, 0x50, 0x87, 0x56, 0x45, 0x72, 0x08, 0x37,
0x81, 0xcd, 0x48, 0x97, 0x30, 0x41, 0x42, 0x75, 0x38, 0x36, 0x1a, 0x61, 0xf8, 0x05, 0xb0, 0x23,
0xcc, 0xfd, 0x9c, 0x93, 0x50, 0x9f, 0x04, 0x5a, 0x8e, 0x30, 0x7f, 0xc3, 0x49, 0xf8, 0xad, 0xf5,
0x97, 0x0f, 0xee, 0x9c, 0x87, 0x41, 0xe5, 0x28, 0x08, 0x08, 0xe7, 0x57, 0x79, 0x27, 0x21, 0xff,
0xa3, 0xc2, 0x0e, 0x40, 0x95, 0x0b, 0xca, 0x70, 0x44, 0xfc, 0x1b, 0xd2, 0x37, 0x75, 0xa6, 0xab,
0xc6, 0xd8, 0x7f, 0x4d, 0xfa, 0x1c, 0x4d, 0x02, 0x23, 0xf1, 0xc1, 0x02, 0x95, 0x2b, 0x86, 0x03,
0x62, 0xee, 0xc3, 0xb2, 0x56, 0x25, 0x64, 0x46, 0xc2, 0x20, 0xa9, 0x2d, 0xe2, 0x94, 0xd0, 0x5c,
0x98, 0xef, 0x69, 0x08, 0xe5, 0x0c, 0x46, 0x48, 0x8f, 0x04, 0x2a, 0x8d, 0x16, 0x32, 0x08, 0x1e,
0x82, 0x95, 0x30, 0xe6, 0xea, 0x71, 0xc1, 0x05, 0x0e, 0x6e, 0xf4, 0xf6, 0x5b, 0xce, 0x5d, 0xe1,
0x56, 0x8d, 0xe3, 0x52, 0xda, 0xd1, 0x14, 0x82, 0xdf, 0x81, 0xfa, 0x78, 0x9a, 0x5a, 0xad, 0xbe,
0xce, 0xb7, 0xe0, 0x5d, 0xe1, 0xd6, 0x46, 0xa1, 0xca, 0x83, 0x66, 0xb0, 0x3c, 0xe9, 0x90, 0xb4,
0xf3, 0x48, 0x15, 0x9f, 0x8d, 0x34, 0x90, 0xd6, 0x24, 0x4e, 0x63, 0xa1, 0x8a, 0x6d, 0x11, 0x69,
0x00, 0xbf, 0x03, 0x65, 0xda, 0x25, 0x8c, 0xc5, 0x21, 0xe1, 0xea, 0x62, 0xf0, 0xff, 0x5e, 0x26,
0x68, 0x1c, 0x2f, 0x37, 0x67, 0x1e, 0x4e, 0x29, 0x49, 0x29, 0xeb, 0xab, 0x4e, 0x6f, 0x36, 0xa7,
0x1d, 0xbf, 0x51, 0x76, 0x34, 0x85, 0x60, 0x0b, 0x40, 0x33, 0x8d, 0x11, 0x91, 0xb3, 0xcc, 0x57,
0xdf, 0x7f, 0x55, 0xcd, 0x55, 0x5f, 0xa1, 0xf6, 0x22, 0xe5, 0x3c, 0xc1, 0x02, 0xa3, 0x7b, 0x16,
0xf8, 0x4b, 0x00, 0xf5, 0x99, 0xf8, 0xef, 0x38, 0x1d, 0x3d, 0xad, 0x74, 0x23, 0x56, 0xfa, 0xda,
0x6b, 0xd6, 0xec, 0x68, 0x74, 0xce, 0xa9, 0xd9, 0xc5, 0xb9, 0x65, 0x5b, 0xce, 0xe2, 0xb9, 0x65,
0x2f, 0x3b, 0xf6, 0x28, 0x7f, 0x66, 0x17, 0x68, 0x6d, 0x88, 0x27, 0x96, 0xd7, 0xfa, 0xd5, 0xc7,
0xdb, 0xad, 0xf9, 0x4f, 0xb7, 0x5b, 0xf3, 0xff, 0xb9, 0xdd, 0x9a, 0xff, 0xfb, 0xe7, 0xad, 0xb9,
0x4f, 0x9f, 0xb7, 0xe6, 0xfe, 0xf5, 0x79, 0x6b, 0xee, 0xf7, 0x93, 0xed, 0x82, 0x74, 0x65, 0xb7,
0x18, 0xbf, 0x96, 0x7b, 0xea, 0xbd, 0xac, 0x5a, 0x46, 0x7b, 0x49, 0xbd, 0x83, 0xbf, 0xf9, 0x6f,
0x00, 0x00, 0x00, 0xff, 0xff, 0xc5, 0xf8, 0x3d, 0xb7, 0x4d, 0x0f, 0x00, 0x00,
}
func (m *Params) Marshal() (dAtA []byte, err error) {
@ -1380,6 +1390,13 @@ func (m *TraceConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.TracerJsonConfig) > 0 {
i -= len(m.TracerJsonConfig)
copy(dAtA[i:], m.TracerJsonConfig)
i = encodeVarintEvm(dAtA, i, uint64(len(m.TracerJsonConfig)))
i--
dAtA[i] = 0x6a
}
if m.EnableReturnData {
i--
if m.EnableReturnData {
@ -1753,6 +1770,10 @@ func (m *TraceConfig) Size() (n int) {
if m.EnableReturnData {
n += 2
}
l = len(m.TracerJsonConfig)
if l > 0 {
n += 1 + l + sovEvm(uint64(l))
}
return n
}
@ -3777,6 +3798,38 @@ func (m *TraceConfig) Unmarshal(dAtA []byte) error {
}
}
m.EnableReturnData = bool(v != 0)
case 13:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TracerJsonConfig", 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.TracerJsonConfig = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipEvm(dAtA[iNdEx:])