From 9b9c835266408d434b4ff9eea231f80697600bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Kunze=20K=C3=BCllmer?= <31522760+fedekunze@users.noreply.github.com> Date: Fri, 30 Jul 2021 07:40:17 -0400 Subject: [PATCH] evm: dynamic fee tx (#384) * evm: dynamic fee tx * proto message * fix * lint --- buf.yaml | 4 + docs/core/proto-docs.md | 39 +- go.mod | 14 +- go.sum | 47 ++ proto/ethermint/evm/v1alpha1/query.proto | 59 +- proto/ethermint/evm/v1alpha1/tx.proto | 93 ++- x/evm/types/access_list_tx.go | 10 + x/evm/types/codec.go | 1 + x/evm/types/dynamic_fee_tx.go | 245 +++++++ x/evm/types/errors.go | 8 + x/evm/types/legacy_tx.go | 10 + x/evm/types/query.pb.go | 22 +- x/evm/types/tx.pb.go | 803 +++++++++++++++++++++-- x/evm/types/tx_data.go | 10 +- 14 files changed, 1242 insertions(+), 123 deletions(-) create mode 100644 x/evm/types/dynamic_fee_tx.go diff --git a/buf.yaml b/buf.yaml index 72a5e46b..15f3efb9 100644 --- a/buf.yaml +++ b/buf.yaml @@ -15,6 +15,10 @@ lint: - SERVICE_SUFFIX - PACKAGE_VERSION_SUFFIX - RPC_REQUEST_STANDARD_NAME + - RPC_REQUEST_RESPONSE_UNIQUE + - RPC_RESPONSE_STANDARD_NAME + - RPC_REQUEST_RESPONSE_UNIQUE + - COMMENT_MESSAGE ignore: - tendermint - gogoproto diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md index 4cc85e14..5351376e 100644 --- a/docs/core/proto-docs.md +++ b/docs/core/proto-docs.md @@ -23,6 +23,7 @@ - [ethermint/evm/v1alpha1/tx.proto](#ethermint/evm/v1alpha1/tx.proto) - [AccessListTx](#ethermint.evm.v1alpha1.AccessListTx) + - [DynamicFeeTx](#ethermint.evm.v1alpha1.DynamicFeeTx) - [ExtensionOptionsEthereumTx](#ethermint.evm.v1alpha1.ExtensionOptionsEthereumTx) - [ExtensionOptionsWeb3Tx](#ethermint.evm.v1alpha1.ExtensionOptionsWeb3Tx) - [LegacyTx](#ethermint.evm.v1alpha1.LegacyTx) @@ -360,6 +361,32 @@ AccessListTx is the data of EIP-2930 access list transactions. + + +### DynamicFeeTx +DynamicFeeTx is the data of EIP-1559 dinamic fee transactions. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `chain_id` | [string](#string) | | destination EVM chain ID | +| `nonce` | [uint64](#uint64) | | nonce corresponds to the account nonce (transaction sequence). | +| `gas_tip_cap` | [string](#string) | | gas tip cap defines the max value for the gas tip | +| `gas_fee_cap` | [string](#string) | | gas fee cap defines the max value for the gas fee | +| `gas` | [uint64](#uint64) | | gas defines the gas limit defined for the transaction. | +| `to` | [string](#string) | | hex formatted address of the recipient | +| `value` | [string](#string) | | value defines the the transaction amount. | +| `data` | [bytes](#bytes) | | input defines the data payload bytes of the transaction. | +| `accesses` | [AccessTuple](#ethermint.evm.v1alpha1.AccessTuple) | repeated | | +| `v` | [bytes](#bytes) | | v defines the signature value | +| `r` | [bytes](#bytes) | | r defines the signature value | +| `s` | [bytes](#bytes) | | s define the signature value | + + + + + + ### ExtensionOptionsEthereumTx @@ -659,7 +686,8 @@ method. ### QueryCosmosAccountRequest -QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC method. +QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC +method. | Field | Type | Label | Description | @@ -674,7 +702,8 @@ QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC me ### QueryCosmosAccountResponse -QueryCosmosAccountResponse is the response type for the Query/CosmosAccount RPC method. +QueryCosmosAccountResponse is the response type for the Query/CosmosAccount +RPC method. | Field | Type | Label | Description | @@ -809,7 +838,8 @@ QueryTxLogs is the response type for the Query/TxLogs RPC method. ### QueryValidatorAccountRequest -QueryValidatorAccountRequest is the request type for the Query/ValidatorAccount RPC method. +QueryValidatorAccountRequest is the request type for the +Query/ValidatorAccount RPC method. | Field | Type | Label | Description | @@ -824,7 +854,8 @@ QueryValidatorAccountRequest is the request type for the Query/ValidatorAccount ### QueryValidatorAccountResponse -QueryValidatorAccountResponse is the response type for the Query/ValidatorAccount RPC method. +QueryValidatorAccountResponse is the response type for the +Query/ValidatorAccount RPC method. | Field | Type | Label | Description | diff --git a/go.mod b/go.mod index b8b448dc..1bc901c7 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,10 @@ module github.com/tharsis/ethermint go 1.16 require ( + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect + github.com/aokoli/goutils v1.1.1 // indirect github.com/armon/go-metrics v0.3.9 github.com/aws/aws-sdk-go v1.38.21 // indirect github.com/bitly/go-simplejson v0.5.0 // indirect @@ -15,21 +19,27 @@ require ( github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/ibc-go v1.0.0-rc3 github.com/deckarep/golang-set v1.7.1 // indirect + github.com/envoyproxy/protoc-gen-validate v0.6.1 // indirect github.com/ethereum/go-ethereum v1.10.3 github.com/gofrs/uuid v4.0.0+incompatible // indirect github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.2 - github.com/google/uuid v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 github.com/gorilla/websocket v1.4.2 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-immutable-radix v1.3.0 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/imdario/mergo v0.3.12 // indirect github.com/improbable-eng/grpc-web v0.14.0 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/miguelmota/go-ethereum-hdwallet v0.0.1 + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mwitkow/go-proto-validators v0.3.2 // indirect github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 github.com/pkg/errors v0.9.1 github.com/prometheus/tsdb v0.10.0 // indirect + github.com/pseudomuto/protoc-gen-doc v1.4.1 // indirect github.com/rakyll/statik v0.1.7 github.com/regen-network/cosmos-proto v0.3.1 github.com/rjeczalik/notify v0.9.2 // indirect @@ -44,7 +54,7 @@ require ( github.com/tyler-smith/go-bip39 v1.1.0 github.com/xlab/suplog v1.3.0 golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect - google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46 + google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b google.golang.org/grpc v1.39.0 gopkg.in/yaml.v2 v2.4.0 nhooyr.io/websocket v1.8.7 // indirect diff --git a/go.sum b/go.sum index 0c4ab406..528a06a9 100644 --- a/go.sum +++ b/go.sum @@ -68,6 +68,14 @@ github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -95,6 +103,9 @@ github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKS github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/aokoli/goutils v1.1.1 h1:/hA+Ywo3AxoDZY5ZMnkiEkUvkK4BPp927ax110KCqqg= +github.com/aokoli/goutils v1.1.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -232,6 +243,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -276,6 +288,9 @@ github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 h1:2vLKys4RBU4 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.3.0-java/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.1 h1:4CF52PCseTFt4bE+Yk3dIpdVi7XWuPVMhPtm4FaIJPM= +github.com/envoyproxy/protoc-gen-validate v0.6.1/go.mod h1:txg5va2Qkip90uYoSKH+nkAAmXrb2j3iq4FLwdrCbXQ= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/ethereum/go-ethereum v1.10.1/go.mod h1:E5e/zvdfUVr91JZ0AwjyuJM3x+no51zZJRz61orLLSk= github.com/ethereum/go-ethereum v1.10.3 h1:SEYOYARvbWnoDl1hOSks3ZJQpRiiRJe8ubaQGJQwq0s= @@ -436,12 +451,15 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/protobuf v3.14.0+incompatible/go.mod h1:lUQ9D1ePzbH2PrIS7ob/bjm9HXyH5WHB0Akwh7URreM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= @@ -524,14 +542,21 @@ github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iU github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goupnp v1.0.1-0.20200620063722-49508fba0031/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88 h1:bcAj8KroPf552TScjFPIakjH2/tdIrIH8F+cc4v4SRo= github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/improbable-eng/grpc-web v0.14.0 h1:GdoK+cXABdB+1keuqsV1drSFO2XLYIxqt/4Rj8SWGBk= github.com/improbable-eng/grpc-web v0.14.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -634,6 +659,7 @@ github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoR github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lyft/protoc-gen-star v0.5.1/go.mod h1:9toiA3cC7z5uVbODF7kEQ91Xn7XNFkVUl+SrEe+ZORU= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= @@ -668,6 +694,8 @@ github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjK github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -679,6 +707,8 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -691,6 +721,9 @@ github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ib github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.3.2 h1:qRlmpTzm2pstMKKzTdvwPCF5QfBNURSlAgN/R+qbKos= +github.com/mwitkow/go-proto-validators v0.3.2/go.mod h1:ej0Qp0qMgHN/KtDyUt+Q1/tA7a5VarXUOUxD+oeD30w= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -775,6 +808,7 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -823,6 +857,10 @@ github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= +github.com/pseudomuto/protoc-gen-doc v1.4.1 h1:aNTZq0dy0Pq2ag2v7bhNKFNgBBA8wMCoJSChhd7RciE= +github.com/pseudomuto/protoc-gen-doc v1.4.1/go.mod h1:exDTOVwqpp30eV/EDPFLZy3Pwr2sn6hBC1WIYH/UbIg= +github.com/pseudomuto/protokit v0.2.0 h1:hlnBDcy3YEDXH7kc9gV+NLaN0cDzhDvD1s7Y6FZ8RpM= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -881,6 +919,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -920,6 +960,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -1034,6 +1075,7 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1175,6 +1217,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1344,6 +1387,7 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1387,6 +1431,7 @@ google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1436,6 +1481,8 @@ google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaE google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46 h1:C+heNsV69Z0EjfRnhU7mg6EX5zz5l7x7hhTil+Ayj8g= google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM= +google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.1/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= diff --git a/proto/ethermint/evm/v1alpha1/query.proto b/proto/ethermint/evm/v1alpha1/query.proto index ce2fe984..281b9f29 100644 --- a/proto/ethermint/evm/v1alpha1/query.proto +++ b/proto/ethermint/evm/v1alpha1/query.proto @@ -17,13 +17,18 @@ service Query { } // CosmosAccount queries an Ethereum account's Cosmos Address. - rpc CosmosAccount(QueryCosmosAccountRequest) returns (QueryCosmosAccountResponse) { - option (google.api.http).get = "/ethermint/evm/v1alpha1/cosmos_account/{address}"; + rpc CosmosAccount(QueryCosmosAccountRequest) + returns (QueryCosmosAccountResponse) { + option (google.api.http).get = + "/ethermint/evm/v1alpha1/cosmos_account/{address}"; } - // ValidatorAccount queries an Ethereum account's from a validator consensus Address. - rpc ValidatorAccount(QueryValidatorAccountRequest) returns (QueryValidatorAccountResponse) { - option (google.api.http).get = "/ethermint/evm/v1alpha1/validator_account/{cons_address}"; + // ValidatorAccount queries an Ethereum account's from a validator consensus + // Address. + rpc ValidatorAccount(QueryValidatorAccountRequest) + returns (QueryValidatorAccountResponse) { + option (google.api.http).get = + "/ethermint/evm/v1alpha1/validator_account/{cons_address}"; } // Balance queries the balance of a the EVM denomination for a single @@ -34,7 +39,8 @@ service Query { // Storage queries the balance of all coins for a single account. rpc Storage(QueryStorageRequest) returns (QueryStorageResponse) { - option (google.api.http).get = "/ethermint/evm/v1alpha1/storage/{address}/{key}"; + option (google.api.http).get = + "/ethermint/evm/v1alpha1/storage/{address}/{key}"; } // Code queries the balance of all coins for a single account. @@ -76,12 +82,11 @@ service Query { rpc EstimateGas(EthCallRequest) returns (EstimateGasResponse) { option (google.api.http).get = "/ethermint/evm/v1alpha1/estimate_gas"; } - } // QueryAccountRequest is the request type for the Query/Account RPC method. message QueryAccountRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // address is the ethereum hex address to query the account for. @@ -98,16 +103,18 @@ message QueryAccountResponse { uint64 nonce = 3; } -// QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC method. +// QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC +// method. message QueryCosmosAccountRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // address is the ethereum hex address to query the account for. string address = 1; } -// QueryCosmosAccountResponse is the response type for the Query/CosmosAccount RPC method. +// QueryCosmosAccountResponse is the response type for the Query/CosmosAccount +// RPC method. message QueryCosmosAccountResponse { // cosmos_address is the cosmos address of the account. string cosmos_address = 1; @@ -117,16 +124,18 @@ message QueryCosmosAccountResponse { uint64 account_number = 3; } -// QueryValidatorAccountRequest is the request type for the Query/ValidatorAccount RPC method. +// QueryValidatorAccountRequest is the request type for the +// Query/ValidatorAccount RPC method. message QueryValidatorAccountRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // cons_address is the validator cons address to query the account for. string cons_address = 1; } -// QueryValidatorAccountResponse is the response type for the Query/ValidatorAccount RPC method. +// QueryValidatorAccountResponse is the response type for the +// Query/ValidatorAccount RPC method. message QueryValidatorAccountResponse { // account_address is the cosmos address of the account in bech32 format. string account_address = 1; @@ -138,7 +147,7 @@ message QueryValidatorAccountResponse { // QueryBalanceRequest is the request type for the Query/Balance RPC method. message QueryBalanceRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // address is the ethereum hex address to query the balance for. @@ -153,7 +162,7 @@ message QueryBalanceResponse { // QueryStorageRequest is the request type for the Query/Storage RPC method. message QueryStorageRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; /// address is the ethereum hex address to query the storage state for. @@ -172,7 +181,7 @@ message QueryStorageResponse { // QueryCodeRequest is the request type for the Query/Code RPC method. message QueryCodeRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // address is the ethereum hex address to query the code for. @@ -188,7 +197,7 @@ message QueryCodeResponse { // QueryTxLogsRequest is the request type for the Query/TxLogs RPC method. message QueryTxLogsRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // hash is the ethereum transaction hex hash to query the logs for. @@ -203,7 +212,7 @@ message QueryTxLogsResponse { // QueryBlockLogsRequest is the request type for the Query/BlockLogs RPC method. message QueryBlockLogsRequest { - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; // hash is the block hash to query the logs for. @@ -215,7 +224,7 @@ message QueryBlockLogsRequest { // QueryTxLogs is the response type for the Query/BlockLogs RPC method. message QueryBlockLogsResponse { // logs represents the ethereum logs generated at the given block hash. - repeated TransactionLogs tx_logs = 1 [(gogoproto.nullable) = false]; + repeated TransactionLogs tx_logs = 1 [ (gogoproto.nullable) = false ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -225,8 +234,8 @@ message QueryBlockLogsResponse { message QueryBlockBloomRequest { // height of the block which we want to query the bloom filter. // Tendermint always replace the query request header by the current context - // header, height cannot be extracted from there, so we need to explicitly pass - // it in parameter. + // header, height cannot be extracted from there, so we need to explicitly + // pass it in parameter. int64 height = 1; } @@ -243,7 +252,7 @@ message QueryParamsRequest {} // QueryParamsResponse defines the response type for querying x/evm parameters. message QueryParamsResponse { // params define the evm module parameters. - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [ (gogoproto.nullable) = false ]; } // QueryStaticCallRequest defines static call request @@ -255,9 +264,7 @@ message QueryStaticCallRequest { } // QueryStaticCallRequest defines static call response -message QueryStaticCallResponse { - bytes data = 1; -} +message QueryStaticCallResponse { bytes data = 1; } // EthCallRequest defines EthCall request message EthCallRequest { diff --git a/proto/ethermint/evm/v1alpha1/tx.proto b/proto/ethermint/evm/v1alpha1/tx.proto index 900883b3..681cdf00 100644 --- a/proto/ethermint/evm/v1alpha1/tx.proto +++ b/proto/ethermint/evm/v1alpha1/tx.proto @@ -23,12 +23,12 @@ message MsgEthereumTx { // caches // encoded storage size of the transaction - double size = 2 [(gogoproto.jsontag) = "-"]; + double size = 2 [ (gogoproto.jsontag) = "-" ]; // transaction hash in hex format - string hash = 3 [(gogoproto.moretags) = "rlp:\"-\""]; - // ethereum signer address in hex format. This address value is checked against - // the address derived from the signature (V, R, S) using the secp256k1 - // elliptic curve + string hash = 3 [ (gogoproto.moretags) = "rlp:\"-\"" ]; + // ethereum signer address in hex format. This address value is checked + // against the address derived from the signature (V, R, S) using the + // secp256k1 elliptic curve string from = 4; } @@ -40,11 +40,10 @@ message LegacyTx { // nonce corresponds to the account nonce (transaction sequence). uint64 nonce = 1; // gas price defines the value for each gas unit - string gas_price = 2 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int" - ]; + string gas_price = 2 + [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int" ]; // gas defines the gas limit defined for the transaction. - uint64 gas = 3 [(gogoproto.customname) = "GasLimit"]; + uint64 gas = 3 [ (gogoproto.customname) = "GasLimit" ]; // hex formatted address of the recipient string to = 4; // value defines the unsigned integer value of the transaction amount. @@ -53,7 +52,7 @@ message LegacyTx { (gogoproto.customname) = "Amount" ]; // input defines the data payload bytes of the transaction. - bytes data = 6; + bytes data = 6; // v defines the signature value bytes v = 7; // r defines the signature value @@ -62,7 +61,6 @@ message LegacyTx { bytes s = 9; } - // AccessListTx is the data of EIP-2930 access list transactions. message AccessListTx { option (gogoproto.goproto_getters) = false; @@ -72,16 +70,15 @@ message AccessListTx { string chain_id = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.customname) = "ChainID", - (gogoproto.jsontag) = "chainID" + (gogoproto.jsontag) = "chainID" ]; // nonce corresponds to the account nonce (transaction sequence). uint64 nonce = 2; // gas price defines the value for each gas unit - string gas_price = 3 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int" - ]; + string gas_price = 3 + [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int" ]; // gas defines the gas limit defined for the transaction. - uint64 gas = 4 [(gogoproto.customname) = "GasLimit"]; + uint64 gas = 4 [ (gogoproto.customname) = "GasLimit" ]; // hex formatted address of the recipient string to = 5; // value defines the unsigned integer value of the transaction amount. @@ -90,9 +87,12 @@ message AccessListTx { (gogoproto.customname) = "Amount" ]; // input defines the data payload bytes of the transaction. - bytes data = 7; - repeated AccessTuple accesses = 8 - [(gogoproto.castrepeated) = "AccessList", (gogoproto.jsontag) = "accessList", (gogoproto.nullable) = false]; + bytes data = 7; + repeated AccessTuple accesses = 8 [ + (gogoproto.castrepeated) = "AccessList", + (gogoproto.jsontag) = "accessList", + (gogoproto.nullable) = false + ]; // v defines the signature value bytes v = 9; // r defines the signature value @@ -101,25 +101,68 @@ message AccessListTx { bytes s = 11; } +// DynamicFeeTx is the data of EIP-1559 dinamic fee transactions. +message DynamicFeeTx { + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "TxData"; + + // destination EVM chain ID + string chain_id = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customname) = "ChainID", + (gogoproto.jsontag) = "chainID" + ]; + // nonce corresponds to the account nonce (transaction sequence). + uint64 nonce = 2; + // gas tip cap defines the max value for the gas tip + string gas_tip_cap = 3 + [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int" ]; + // gas fee cap defines the max value for the gas fee + string gas_fee_cap = 4 + [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int" ]; + // gas defines the gas limit defined for the transaction. + uint64 gas = 5 [ (gogoproto.customname) = "GasLimit" ]; + // hex formatted address of the recipient + string to = 6; + // value defines the the transaction amount. + string value = 7 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customname) = "Amount" + ]; + // input defines the data payload bytes of the transaction. + bytes data = 8; + repeated AccessTuple accesses = 9 [ + (gogoproto.castrepeated) = "AccessList", + (gogoproto.jsontag) = "accessList", + (gogoproto.nullable) = false + ]; + // v defines the signature value + bytes v = 10; + // r defines the signature value + bytes r = 11; + // s define the signature value + bytes s = 12; +} + message ExtensionOptionsEthereumTx { option (gogoproto.goproto_getters) = false; } -message ExtensionOptionsWeb3Tx { - option (gogoproto.goproto_getters) = false; -} +message ExtensionOptionsWeb3Tx { option (gogoproto.goproto_getters) = false; } // MsgEthereumTxResponse defines the Msg/EthereumTx response type. message MsgEthereumTxResponse { option (gogoproto.goproto_getters) = false; - // ethereum transaction hash in hex format. This hash differs from the Tendermint sha256 hash of the transaction - // bytes. See https://github.com/tendermint/tendermint/issues/6539 for reference + // ethereum transaction hash in hex format. This hash differs from the + // Tendermint sha256 hash of the transaction bytes. See + // https://github.com/tendermint/tendermint/issues/6539 for reference string hash = 1; // logs contains the transaction hash and the proto-compatible ethereum // logs. repeated Log logs = 2; - // returned data from evm function (result or data supplied with revert opcode) + // returned data from evm function (result or data supplied with revert + // opcode) bytes ret = 3; // vm error is the error returned by vm execution string vm_error = 4; diff --git a/x/evm/types/access_list_tx.go b/x/evm/types/access_list_tx.go index 5fed1d11..a4758c62 100644 --- a/x/evm/types/access_list_tx.go +++ b/x/evm/types/access_list_tx.go @@ -98,6 +98,16 @@ func (tx *AccessListTx) GetGasPrice() *big.Int { return tx.GasPrice.BigInt() } +// GetGasTipCap returns the gas price field. +func (tx *AccessListTx) GetGasTipCap() *big.Int { + return tx.GetGasPrice() +} + +// GetGasFeeCap returns the gas price field. +func (tx *AccessListTx) GetGasFeeCap() *big.Int { + return tx.GetGasPrice() +} + // GetValue returns the tx amount. func (tx *AccessListTx) GetValue() *big.Int { if tx.Amount == nil { diff --git a/x/evm/types/codec.go b/x/evm/types/codec.go index 5998c016..09f02c77 100644 --- a/x/evm/types/codec.go +++ b/x/evm/types/codec.go @@ -37,6 +37,7 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { registry.RegisterInterface( "ethermint.evm.v1alpha1.TxData", (*TxData)(nil), + &DynamicFeeTx{}, &AccessListTx{}, &LegacyTx{}, ) diff --git a/x/evm/types/dynamic_fee_tx.go b/x/evm/types/dynamic_fee_tx.go new file mode 100644 index 00000000..8906cea7 --- /dev/null +++ b/x/evm/types/dynamic_fee_tx.go @@ -0,0 +1,245 @@ +package types + +import ( + "math/big" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/ethereum/go-ethereum/common" + ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/tharsis/ethermint/types" +) + +// nolint: deadcode, unused +func newDynamicFeeTx(tx *ethtypes.Transaction) *DynamicFeeTx { + txData := &DynamicFeeTx{ + Nonce: tx.Nonce(), + Data: tx.Data(), + GasLimit: tx.Gas(), + } + + v, r, s := tx.RawSignatureValues() + if tx.To() != nil { + txData.To = tx.To().Hex() + } + + if tx.Value() != nil { + amountInt := sdk.NewIntFromBigInt(tx.Value()) + txData.Amount = &amountInt + } + // TODO: + + // if tx.GasFeeCap() != nil { + // gasFeeCapInt := sdk.NewIntFromBigInt(tx.GasFeeCap()) + // txData.GasFeeCap = &gasFeeCapInt + // } + + // if tx.GasTipCap() != nil { + // gasTipCapInt := sdk.NewIntFromBigInt(tx.GasTipCap()) + // txData.GasTipCap = &gasTipCapInt + // } + + if tx.AccessList() != nil { + al := tx.AccessList() + txData.Accesses = NewAccessList(&al) + } + + txData.SetSignatureValues(tx.ChainId(), v, r, s) + return txData +} + +// TxType returns the tx type +func (tx *DynamicFeeTx) TxType() uint8 { + // TODO + return 0 + // return ethtypes.DynamicFeeTxType +} + +// Copy returns an instance with the same field values +func (tx *DynamicFeeTx) Copy() TxData { + return &DynamicFeeTx{ + ChainID: tx.ChainID, + Nonce: tx.Nonce, + GasTipCap: tx.GasTipCap, + GasFeeCap: tx.GasFeeCap, + GasLimit: tx.GasLimit, + To: tx.To, + Amount: tx.Amount, + Data: common.CopyBytes(tx.Data), + Accesses: tx.Accesses, + V: common.CopyBytes(tx.V), + R: common.CopyBytes(tx.R), + S: common.CopyBytes(tx.S), + } +} + +// GetChainID returns the chain id field from the DynamicFeeTx +func (tx *DynamicFeeTx) GetChainID() *big.Int { + if tx.ChainID == nil { + return nil + } + + return tx.ChainID.BigInt() +} + +// GetAccessList returns the AccessList field. +func (tx *DynamicFeeTx) GetAccessList() ethtypes.AccessList { + if tx.Accesses == nil { + return nil + } + return *tx.Accesses.ToEthAccessList() +} + +// GetData returns the a copy of the input data bytes. +func (tx *DynamicFeeTx) GetData() []byte { + return common.CopyBytes(tx.Data) +} + +// GetGas returns the gas limit. +func (tx *DynamicFeeTx) GetGas() uint64 { + return tx.GasLimit +} + +// GetGasPrice returns the gas fee cap field. +func (tx *DynamicFeeTx) GetGasPrice() *big.Int { + return tx.GetGasFeeCap() +} + +// GetGasTipCap returns the gas price field. +func (tx *DynamicFeeTx) GetGasTipCap() *big.Int { + if tx.GasTipCap == nil { + return nil + } + return tx.GasTipCap.BigInt() +} + +// GetGasFeeCap returns the gas price field. +func (tx *DynamicFeeTx) GetGasFeeCap() *big.Int { + if tx.GasFeeCap == nil { + return nil + } + return tx.GasFeeCap.BigInt() +} + +// GetValue returns the tx amount. +func (tx *DynamicFeeTx) GetValue() *big.Int { + if tx.Amount == nil { + return nil + } + + return tx.Amount.BigInt() +} + +// GetNonce returns the account sequence for the transaction. +func (tx *DynamicFeeTx) GetNonce() uint64 { return tx.Nonce } + +// GetTo returns the pointer to the recipient address. +func (tx *DynamicFeeTx) GetTo() *common.Address { + if tx.To == "" { + return nil + } + to := common.HexToAddress(tx.To) + return &to +} + +// AsEthereumData returns an DynamicFeeTx transaction tx from the proto-formatted +// TxData defined on the Cosmos EVM. +func (tx *DynamicFeeTx) AsEthereumData() ethtypes.TxData { + return nil + // TODO: + // v, r, s := tx.GetRawSignatureValues() + // return ðtypes.DynamicFeeTx{ + // ChainID: tx.GetChainID(), + // Nonce: tx.GetNonce(), + // GasTipCap: tx.GetGasTipCap(), + // GasFeeCap: tx.GetGasFeeCap(), + // Gas: tx.GetGas(), + // To: tx.GetTo(), + // Value: tx.GetValue(), + // Data: tx.GetData(), + // AccessList: tx.GetAccessList(), + // V: v, + // R: r, + // S: s, + // } +} + +// GetRawSignatureValues returns the V, R, S signature values of the transaction. +// The return values should not be modified by the caller. +func (tx *DynamicFeeTx) GetRawSignatureValues() (v, r, s *big.Int) { + return rawSignatureValues(tx.V, tx.R, tx.S) +} + +// SetSignatureValues sets the signature values to the transaction. +func (tx *DynamicFeeTx) SetSignatureValues(chainID, v, r, s *big.Int) { + if v != nil { + tx.V = v.Bytes() + } + if r != nil { + tx.R = r.Bytes() + } + if s != nil { + tx.S = s.Bytes() + } + if chainID != nil { + chainIDInt := sdk.NewIntFromBigInt(chainID) + tx.ChainID = &chainIDInt + } +} + +// Validate performs a stateless validation of the tx fields. +func (tx DynamicFeeTx) Validate() error { + if tx.GasTipCap == nil { + return sdkerrors.Wrap(ErrInvalidGasCap, "gas tip cap cannot nil") + } + + if tx.GasFeeCap == nil { + return sdkerrors.Wrap(ErrInvalidGasCap, "gas fee cap cannot nil") + } + + if tx.GasTipCap.IsNegative() { + return sdkerrors.Wrapf(ErrInvalidGasCap, "gas tip cap cannot be negative %s", tx.GasTipCap) + } + + if tx.GasFeeCap.IsNegative() { + return sdkerrors.Wrapf(ErrInvalidGasCap, "gas fee cap cannot be negative %s", tx.GasFeeCap) + } + + if tx.GasFeeCap.LT(*tx.GasTipCap) { + return sdkerrors.Wrapf( + ErrInvalidGasCap, "max priority fee per gas higher than max fee per gas (%s > %s)", + tx.GasTipCap, tx.GasFeeCap, + ) + } + + amount := tx.GetValue() + // Amount can be 0 + if amount != nil && amount.Sign() == -1 { + return sdkerrors.Wrapf(ErrInvalidAmount, "amount cannot be negative %s", amount) + } + + if tx.To != "" { + if err := types.ValidateAddress(tx.To); err != nil { + return sdkerrors.Wrap(err, "invalid to address") + } + } + + if tx.GetChainID() == nil { + return sdkerrors.Wrap( + sdkerrors.ErrInvalidChainID, + "chain ID must be present on AccessList txs", + ) + } + + return nil +} + +// Fee panics as it requires the base fee amount to calculate +func (tx DynamicFeeTx) Fee() *big.Int { + panic("fee can only be called manually by providing the base fee") +} + +// Cost returns amount + gasprice * gaslimit. +func (tx DynamicFeeTx) Cost() *big.Int { + panic("cost can only be called manually by providing the base fee") +} diff --git a/x/evm/types/errors.go b/x/evm/types/errors.go index a255a790..09cefc22 100644 --- a/x/evm/types/errors.go +++ b/x/evm/types/errors.go @@ -28,6 +28,8 @@ const ( codeErrVMExecution codeErrInvalidRefund codeErrInconsistentGas + codeErrInvalidGasCap + codeErrInvalidBaseFee ) var ( @@ -75,6 +77,12 @@ var ( // ErrInconsistentGas returns an error if a the gas differs from the expected one. ErrInconsistentGas = sdkerrors.Register(ModuleName, codeErrInconsistentGas, "inconsistent gas") + + // ErrInvalidGasCap returns an error if a the gas cap value is negative or invalid + ErrInvalidGasCap = sdkerrors.Register(ModuleName, codeErrInvalidGasCap, "invalid gas cap") + + // ErrInvalidBaseFee returns an error if a the base fee cap value is invalid + ErrInvalidBaseFee = sdkerrors.Register(ModuleName, codeErrInvalidBaseFee, "invalid base fee") ) // NewExecErrorWithReason unpacks the revert return bytes and returns a wrapped error diff --git a/x/evm/types/legacy_tx.go b/x/evm/types/legacy_tx.go index 9f5c8792..efbfe42f 100644 --- a/x/evm/types/legacy_tx.go +++ b/x/evm/types/legacy_tx.go @@ -85,6 +85,16 @@ func (tx *LegacyTx) GetGasPrice() *big.Int { return tx.GasPrice.BigInt() } +// GetGasTipCap returns the gas price field. +func (tx *LegacyTx) GetGasTipCap() *big.Int { + return tx.GetGasPrice() +} + +// GetGasFeeCap returns the gas price field. +func (tx *LegacyTx) GetGasFeeCap() *big.Int { + return tx.GetGasPrice() +} + // GetValue returns the tx amount. func (tx *LegacyTx) GetValue() *big.Int { if tx.Amount == nil { diff --git a/x/evm/types/query.pb.go b/x/evm/types/query.pb.go index 1035012a..85c57ac3 100644 --- a/x/evm/types/query.pb.go +++ b/x/evm/types/query.pb.go @@ -133,7 +133,8 @@ func (m *QueryAccountResponse) GetNonce() uint64 { return 0 } -// QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC method. +// QueryCosmosAccountRequest is the request type for the Query/CosmosAccount RPC +// method. type QueryCosmosAccountRequest struct { // address is the ethereum hex address to query the account for. Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -172,7 +173,8 @@ func (m *QueryCosmosAccountRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryCosmosAccountRequest proto.InternalMessageInfo -// QueryCosmosAccountResponse is the response type for the Query/CosmosAccount RPC method. +// QueryCosmosAccountResponse is the response type for the Query/CosmosAccount +// RPC method. type QueryCosmosAccountResponse struct { // cosmos_address is the cosmos address of the account. CosmosAddress string `protobuf:"bytes,1,opt,name=cosmos_address,json=cosmosAddress,proto3" json:"cosmos_address,omitempty"` @@ -236,7 +238,8 @@ func (m *QueryCosmosAccountResponse) GetAccountNumber() uint64 { return 0 } -// QueryValidatorAccountRequest is the request type for the Query/ValidatorAccount RPC method. +// QueryValidatorAccountRequest is the request type for the +// Query/ValidatorAccount RPC method. type QueryValidatorAccountRequest struct { // cons_address is the validator cons address to query the account for. ConsAddress string `protobuf:"bytes,1,opt,name=cons_address,json=consAddress,proto3" json:"cons_address,omitempty"` @@ -275,7 +278,8 @@ func (m *QueryValidatorAccountRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryValidatorAccountRequest proto.InternalMessageInfo -// QueryValidatorAccountResponse is the response type for the Query/ValidatorAccount RPC method. +// QueryValidatorAccountResponse is the response type for the +// Query/ValidatorAccount RPC method. type QueryValidatorAccountResponse struct { // account_address is the cosmos address of the account in bech32 format. AccountAddress string `protobuf:"bytes,1,opt,name=account_address,json=accountAddress,proto3" json:"account_address,omitempty"` @@ -784,8 +788,8 @@ func (m *QueryBlockLogsResponse) GetPagination() *query.PageResponse { type QueryBlockBloomRequest struct { // height of the block which we want to query the bloom filter. // Tendermint always replace the query request header by the current context - // header, height cannot be extracted from there, so we need to explicitly pass - // it in parameter. + // header, height cannot be extracted from there, so we need to explicitly + // pass it in parameter. Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` } @@ -1290,7 +1294,8 @@ type QueryClient interface { Account(ctx context.Context, in *QueryAccountRequest, opts ...grpc.CallOption) (*QueryAccountResponse, error) // CosmosAccount queries an Ethereum account's Cosmos Address. CosmosAccount(ctx context.Context, in *QueryCosmosAccountRequest, opts ...grpc.CallOption) (*QueryCosmosAccountResponse, error) - // ValidatorAccount queries an Ethereum account's from a validator consensus Address. + // ValidatorAccount queries an Ethereum account's from a validator consensus + // Address. ValidatorAccount(ctx context.Context, in *QueryValidatorAccountRequest, opts ...grpc.CallOption) (*QueryValidatorAccountResponse, error) // Balance queries the balance of a the EVM denomination for a single // EthAccount. @@ -1446,7 +1451,8 @@ type QueryServer interface { Account(context.Context, *QueryAccountRequest) (*QueryAccountResponse, error) // CosmosAccount queries an Ethereum account's Cosmos Address. CosmosAccount(context.Context, *QueryCosmosAccountRequest) (*QueryCosmosAccountResponse, error) - // ValidatorAccount queries an Ethereum account's from a validator consensus Address. + // ValidatorAccount queries an Ethereum account's from a validator consensus + // Address. ValidatorAccount(context.Context, *QueryValidatorAccountRequest) (*QueryValidatorAccountResponse, error) // Balance queries the balance of a the EVM denomination for a single // EthAccount. diff --git a/x/evm/types/tx.pb.go b/x/evm/types/tx.pb.go index 4511ed12..8922d5ed 100644 --- a/x/evm/types/tx.pb.go +++ b/x/evm/types/tx.pb.go @@ -40,9 +40,9 @@ type MsgEthereumTx struct { Size_ float64 `protobuf:"fixed64,2,opt,name=size,proto3" json:"-"` // transaction hash in hex format Hash string `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty" rlp:"-"` - // ethereum signer address in hex format. This address value is checked against - // the address derived from the signature (V, R, S) using the secp256k1 - // elliptic curve + // ethereum signer address in hex format. This address value is checked + // against the address derived from the signature (V, R, S) using the + // secp256k1 elliptic curve From string `protobuf:"bytes,4,opt,name=from,proto3" json:"from,omitempty"` } @@ -192,6 +192,66 @@ func (m *AccessListTx) XXX_DiscardUnknown() { var xxx_messageInfo_AccessListTx proto.InternalMessageInfo +// DynamicFeeTx is the data of EIP-1559 dinamic fee transactions. +type DynamicFeeTx struct { + // destination EVM chain ID + ChainID *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"chainID"` + // nonce corresponds to the account nonce (transaction sequence). + Nonce uint64 `protobuf:"varint,2,opt,name=nonce,proto3" json:"nonce,omitempty"` + // gas tip cap defines the max value for the gas tip + GasTipCap *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=gas_tip_cap,json=gasTipCap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"gas_tip_cap,omitempty"` + // gas fee cap defines the max value for the gas fee + GasFeeCap *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=gas_fee_cap,json=gasFeeCap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"gas_fee_cap,omitempty"` + // gas defines the gas limit defined for the transaction. + GasLimit uint64 `protobuf:"varint,5,opt,name=gas,proto3" json:"gas,omitempty"` + // hex formatted address of the recipient + To string `protobuf:"bytes,6,opt,name=to,proto3" json:"to,omitempty"` + // value defines the the transaction amount. + Amount *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,7,opt,name=value,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"value,omitempty"` + // input defines the data payload bytes of the transaction. + Data []byte `protobuf:"bytes,8,opt,name=data,proto3" json:"data,omitempty"` + Accesses AccessList `protobuf:"bytes,9,rep,name=accesses,proto3,castrepeated=AccessList" json:"accessList"` + // v defines the signature value + V []byte `protobuf:"bytes,10,opt,name=v,proto3" json:"v,omitempty"` + // r defines the signature value + R []byte `protobuf:"bytes,11,opt,name=r,proto3" json:"r,omitempty"` + // s define the signature value + S []byte `protobuf:"bytes,12,opt,name=s,proto3" json:"s,omitempty"` +} + +func (m *DynamicFeeTx) Reset() { *m = DynamicFeeTx{} } +func (m *DynamicFeeTx) String() string { return proto.CompactTextString(m) } +func (*DynamicFeeTx) ProtoMessage() {} +func (*DynamicFeeTx) Descriptor() ([]byte, []int) { + return fileDescriptor_6a305e80b084ab0e, []int{3} +} +func (m *DynamicFeeTx) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DynamicFeeTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DynamicFeeTx.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 *DynamicFeeTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_DynamicFeeTx.Merge(m, src) +} +func (m *DynamicFeeTx) XXX_Size() int { + return m.Size() +} +func (m *DynamicFeeTx) XXX_DiscardUnknown() { + xxx_messageInfo_DynamicFeeTx.DiscardUnknown(m) +} + +var xxx_messageInfo_DynamicFeeTx proto.InternalMessageInfo + type ExtensionOptionsEthereumTx struct { } @@ -199,7 +259,7 @@ func (m *ExtensionOptionsEthereumTx) Reset() { *m = ExtensionOptionsEthe func (m *ExtensionOptionsEthereumTx) String() string { return proto.CompactTextString(m) } func (*ExtensionOptionsEthereumTx) ProtoMessage() {} func (*ExtensionOptionsEthereumTx) Descriptor() ([]byte, []int) { - return fileDescriptor_6a305e80b084ab0e, []int{3} + return fileDescriptor_6a305e80b084ab0e, []int{4} } func (m *ExtensionOptionsEthereumTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -235,7 +295,7 @@ func (m *ExtensionOptionsWeb3Tx) Reset() { *m = ExtensionOptionsWeb3Tx{} func (m *ExtensionOptionsWeb3Tx) String() string { return proto.CompactTextString(m) } func (*ExtensionOptionsWeb3Tx) ProtoMessage() {} func (*ExtensionOptionsWeb3Tx) Descriptor() ([]byte, []int) { - return fileDescriptor_6a305e80b084ab0e, []int{4} + return fileDescriptor_6a305e80b084ab0e, []int{5} } func (m *ExtensionOptionsWeb3Tx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -266,13 +326,15 @@ var xxx_messageInfo_ExtensionOptionsWeb3Tx proto.InternalMessageInfo // MsgEthereumTxResponse defines the Msg/EthereumTx response type. type MsgEthereumTxResponse struct { - // ethereum transaction hash in hex format. This hash differs from the Tendermint sha256 hash of the transaction - // bytes. See https://github.com/tendermint/tendermint/issues/6539 for reference + // ethereum transaction hash in hex format. This hash differs from the + // Tendermint sha256 hash of the transaction bytes. See + // https://github.com/tendermint/tendermint/issues/6539 for reference Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` // logs contains the transaction hash and the proto-compatible ethereum // logs. Logs []*Log `protobuf:"bytes,2,rep,name=logs,proto3" json:"logs,omitempty"` - // returned data from evm function (result or data supplied with revert opcode) + // returned data from evm function (result or data supplied with revert + // opcode) Ret []byte `protobuf:"bytes,3,opt,name=ret,proto3" json:"ret,omitempty"` // vm error is the error returned by vm execution VmError string `protobuf:"bytes,4,opt,name=vm_error,json=vmError,proto3" json:"vm_error,omitempty"` @@ -284,7 +346,7 @@ func (m *MsgEthereumTxResponse) Reset() { *m = MsgEthereumTxResponse{} } func (m *MsgEthereumTxResponse) String() string { return proto.CompactTextString(m) } func (*MsgEthereumTxResponse) ProtoMessage() {} func (*MsgEthereumTxResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6a305e80b084ab0e, []int{5} + return fileDescriptor_6a305e80b084ab0e, []int{6} } func (m *MsgEthereumTxResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -317,6 +379,7 @@ func init() { proto.RegisterType((*MsgEthereumTx)(nil), "ethermint.evm.v1alpha1.MsgEthereumTx") proto.RegisterType((*LegacyTx)(nil), "ethermint.evm.v1alpha1.LegacyTx") proto.RegisterType((*AccessListTx)(nil), "ethermint.evm.v1alpha1.AccessListTx") + proto.RegisterType((*DynamicFeeTx)(nil), "ethermint.evm.v1alpha1.DynamicFeeTx") proto.RegisterType((*ExtensionOptionsEthereumTx)(nil), "ethermint.evm.v1alpha1.ExtensionOptionsEthereumTx") proto.RegisterType((*ExtensionOptionsWeb3Tx)(nil), "ethermint.evm.v1alpha1.ExtensionOptionsWeb3Tx") proto.RegisterType((*MsgEthereumTxResponse)(nil), "ethermint.evm.v1alpha1.MsgEthereumTxResponse") @@ -325,54 +388,59 @@ func init() { func init() { proto.RegisterFile("ethermint/evm/v1alpha1/tx.proto", fileDescriptor_6a305e80b084ab0e) } var fileDescriptor_6a305e80b084ab0e = []byte{ - // 750 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x41, 0x6b, 0xdb, 0x48, - 0x14, 0xf6, 0xd8, 0xb2, 0x2d, 0x8f, 0xbd, 0x61, 0x19, 0xb2, 0x41, 0xf1, 0x82, 0x64, 0xbc, 0xec, - 0x62, 0x16, 0x2c, 0x91, 0x64, 0x4f, 0x39, 0x6d, 0xb4, 0x09, 0x21, 0x8b, 0xc3, 0x2e, 0xc2, 0xa5, - 0xd0, 0x1e, 0xc2, 0x58, 0x9e, 0xc8, 0xa2, 0x96, 0xc6, 0x68, 0xc6, 0xc2, 0xee, 0x2f, 0xe8, 0xad, - 0xfd, 0x09, 0x3d, 0xe7, 0xda, 0xfe, 0x88, 0x1c, 0x43, 0x4f, 0xa5, 0x07, 0xb5, 0x38, 0xb7, 0x1c, - 0x7b, 0xe9, 0xb5, 0xcc, 0x48, 0xb6, 0xe3, 0xb6, 0x2e, 0x29, 0xed, 0x49, 0xef, 0xe9, 0x7d, 0x33, - 0xef, 0xcd, 0xf7, 0xbd, 0xf7, 0xa0, 0x41, 0xf8, 0x80, 0x44, 0x81, 0x1f, 0x72, 0x8b, 0xc4, 0x81, - 0x15, 0xef, 0xe0, 0xe1, 0x68, 0x80, 0x77, 0x2c, 0x3e, 0x31, 0x47, 0x11, 0xe5, 0x14, 0x6d, 0x2d, - 0x00, 0x26, 0x89, 0x03, 0x73, 0x0e, 0xa8, 0x6f, 0x7a, 0xd4, 0xa3, 0x12, 0x62, 0x09, 0x2b, 0x45, - 0xd7, 0xb7, 0x3d, 0x4a, 0xbd, 0x21, 0xb1, 0xa4, 0xd7, 0x1b, 0x9f, 0x5b, 0x38, 0x9c, 0xce, 0x43, - 0x2e, 0x65, 0x01, 0x65, 0x67, 0xe9, 0x99, 0xd4, 0xc9, 0x42, 0x8d, 0x35, 0x45, 0x88, 0x84, 0x12, - 0xd1, 0x7c, 0x0a, 0xe0, 0x4f, 0xa7, 0xcc, 0x3b, 0x12, 0x38, 0x32, 0x0e, 0xba, 0x13, 0xd4, 0x82, - 0x4a, 0x1f, 0x73, 0xac, 0x81, 0x06, 0x68, 0x55, 0x77, 0x37, 0xcd, 0x34, 0xb1, 0x39, 0x4f, 0x6c, - 0x1e, 0x84, 0x53, 0x47, 0x22, 0xd0, 0x36, 0x54, 0x98, 0xff, 0x98, 0x68, 0xf9, 0x06, 0x68, 0x01, - 0xbb, 0x78, 0x93, 0x18, 0xa0, 0xed, 0xc8, 0x5f, 0xc8, 0x80, 0xca, 0x00, 0xb3, 0x81, 0x56, 0x68, - 0x80, 0x56, 0xc5, 0xae, 0xbe, 0x4f, 0x8c, 0x72, 0x34, 0x1c, 0xed, 0x37, 0xdb, 0x4d, 0x47, 0x06, - 0x10, 0x82, 0xca, 0x79, 0x44, 0x03, 0x4d, 0x11, 0x00, 0x47, 0xda, 0xfb, 0xca, 0x93, 0xe7, 0x46, - 0xae, 0xf9, 0x22, 0x0f, 0xd5, 0x0e, 0xf1, 0xb0, 0x3b, 0xed, 0x4e, 0xd0, 0x26, 0x2c, 0x86, 0x34, - 0x74, 0x89, 0xac, 0x46, 0x71, 0x52, 0x07, 0x1d, 0xc3, 0x8a, 0x87, 0xc5, 0x83, 0x7d, 0x37, 0xcd, - 0x5e, 0xb1, 0xff, 0x7c, 0x93, 0x18, 0x7f, 0x78, 0x3e, 0x1f, 0x8c, 0x7b, 0xa6, 0x4b, 0x83, 0x8c, - 0x86, 0xec, 0xd3, 0x66, 0xfd, 0x47, 0x16, 0x9f, 0x8e, 0x08, 0x33, 0x4f, 0x42, 0xee, 0xa8, 0x1e, - 0x66, 0xff, 0x8b, 0xb3, 0x48, 0x87, 0x05, 0x0f, 0x33, 0x59, 0xa5, 0x62, 0xd7, 0x66, 0x89, 0xa1, - 0x1e, 0x63, 0xd6, 0xf1, 0x03, 0x9f, 0x3b, 0x22, 0x80, 0x36, 0x60, 0x9e, 0xd3, 0xac, 0xc6, 0x3c, - 0xa7, 0xe8, 0x5f, 0x58, 0x8c, 0xf1, 0x70, 0x4c, 0xb4, 0xa2, 0x4c, 0xfa, 0xd7, 0xdd, 0x93, 0xce, - 0x12, 0xa3, 0x74, 0x10, 0xd0, 0x71, 0xc8, 0x9d, 0xf4, 0x0a, 0xc1, 0x80, 0xe4, 0xb9, 0xd4, 0x00, - 0xad, 0x5a, 0xc6, 0x68, 0x0d, 0x82, 0x58, 0x2b, 0xcb, 0x1f, 0x20, 0x16, 0x5e, 0xa4, 0xa9, 0xa9, - 0x17, 0x09, 0x8f, 0x69, 0x95, 0xd4, 0x63, 0xfb, 0x1b, 0x82, 0xab, 0x57, 0x2f, 0xdb, 0xa5, 0xee, - 0xe4, 0x10, 0x73, 0xdc, 0xfc, 0x50, 0x80, 0xb5, 0x03, 0xd7, 0x25, 0x8c, 0x75, 0x7c, 0xc6, 0xbb, - 0x13, 0xf4, 0x10, 0xaa, 0xee, 0x00, 0xfb, 0xe1, 0x99, 0xdf, 0x97, 0xe4, 0x55, 0xec, 0xbf, 0xbf, - 0xa9, 0xda, 0xf2, 0x3f, 0xe2, 0xf4, 0xc9, 0xe1, 0x4d, 0x62, 0x94, 0xdd, 0xd4, 0x74, 0x32, 0xa3, - 0xbf, 0x94, 0x25, 0xbf, 0x56, 0x96, 0xc2, 0xf7, 0xcb, 0xa2, 0x7c, 0x5d, 0x96, 0xe2, 0xe7, 0xb2, - 0x94, 0x7e, 0x9c, 0x2c, 0xe5, 0x5b, 0xb2, 0x60, 0xa8, 0x62, 0xc9, 0x2d, 0x61, 0x9a, 0xda, 0x28, - 0xb4, 0xaa, 0xbb, 0xbf, 0x99, 0x5f, 0x9e, 0x5e, 0x33, 0xd5, 0xa0, 0x3b, 0x1e, 0x0d, 0x89, 0xdd, - 0xb8, 0x4c, 0x8c, 0xdc, 0x4d, 0x62, 0x40, 0xbc, 0x10, 0xe6, 0xe2, 0xad, 0x01, 0x97, 0x32, 0x39, - 0x8b, 0x6b, 0x53, 0xe5, 0x2b, 0x2b, 0xca, 0xc3, 0x15, 0xe5, 0xab, 0xeb, 0x94, 0x6f, 0xc2, 0xfa, - 0xd1, 0x84, 0x93, 0x90, 0xf9, 0x34, 0xfc, 0x6f, 0xc4, 0x7d, 0x1a, 0xb2, 0xe5, 0x34, 0x67, 0x33, - 0xa5, 0xc3, 0xad, 0x4f, 0x31, 0xf7, 0x49, 0x6f, 0x6f, 0x11, 0xbf, 0x00, 0xf0, 0x97, 0x95, 0x2d, - 0xe0, 0x10, 0x36, 0xa2, 0x21, 0x93, 0x74, 0xc8, 0x41, 0x06, 0xe9, 0x9c, 0xca, 0xd9, 0xb5, 0xa0, - 0x32, 0xa4, 0x1e, 0xd3, 0xf2, 0x92, 0x8a, 0x5f, 0xd7, 0x51, 0xd1, 0xa1, 0x9e, 0x23, 0x81, 0xe8, - 0x67, 0x58, 0x88, 0x08, 0x97, 0x2d, 0x51, 0x73, 0x84, 0x89, 0xb6, 0xa1, 0x1a, 0x07, 0x67, 0x24, - 0x8a, 0x68, 0x94, 0x8d, 0x57, 0x39, 0x0e, 0x8e, 0x84, 0x2b, 0x42, 0xa2, 0x8b, 0xc6, 0x8c, 0xf4, - 0xa5, 0xc4, 0x8a, 0x53, 0xf6, 0x30, 0xbb, 0xc7, 0x48, 0x3f, 0x2d, 0x76, 0xd7, 0x87, 0x85, 0x53, - 0xe6, 0xa1, 0x1e, 0x84, 0xb7, 0xb6, 0xd6, 0xef, 0xeb, 0xaa, 0x58, 0x79, 0x56, 0xbd, 0x7d, 0x27, - 0xd8, 0xfc, 0xf5, 0xb6, 0x7d, 0x39, 0xd3, 0xc1, 0xd5, 0x4c, 0x07, 0xef, 0x66, 0x3a, 0x78, 0x76, - 0xad, 0xe7, 0xae, 0xae, 0xf5, 0xdc, 0xeb, 0x6b, 0x3d, 0xf7, 0xa0, 0x75, 0xab, 0xbf, 0xf8, 0x00, - 0x47, 0xcc, 0x67, 0xd6, 0x72, 0xd9, 0x4e, 0xe4, 0xba, 0x95, 0x5d, 0xd6, 0x2b, 0xc9, 0xcd, 0xb9, - 0xf7, 0x31, 0x00, 0x00, 0xff, 0xff, 0x32, 0x13, 0x74, 0x7d, 0x11, 0x06, 0x00, 0x00, + // 829 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x4d, 0x6f, 0xf3, 0x44, + 0x10, 0x8e, 0x13, 0x27, 0x76, 0x36, 0xe1, 0x15, 0xb2, 0xca, 0x2b, 0x37, 0x48, 0x76, 0x14, 0x04, + 0x8a, 0x90, 0x62, 0xab, 0x2d, 0xa7, 0x9e, 0xa8, 0xfb, 0xa5, 0x56, 0xa9, 0x40, 0x56, 0x10, 0x12, + 0x1c, 0xa2, 0x8d, 0xb3, 0x75, 0x56, 0xc4, 0x5e, 0xcb, 0xbb, 0xb1, 0x12, 0x7e, 0x01, 0x37, 0xf8, + 0x09, 0x9c, 0x7b, 0x85, 0xdf, 0x80, 0x7a, 0xac, 0x38, 0x21, 0x0e, 0x06, 0xa5, 0xb7, 0x1e, 0xb9, + 0x70, 0x45, 0xbb, 0x76, 0x92, 0x86, 0x92, 0xaa, 0x94, 0xa2, 0xf7, 0x94, 0x19, 0xcf, 0xb3, 0x33, + 0xb3, 0xf3, 0x3c, 0xd9, 0x01, 0x26, 0x62, 0x23, 0x14, 0x07, 0x38, 0x64, 0x36, 0x4a, 0x02, 0x3b, + 0xd9, 0x81, 0xe3, 0x68, 0x04, 0x77, 0x6c, 0x36, 0xb5, 0xa2, 0x98, 0x30, 0xa2, 0xbd, 0x5e, 0x02, + 0x2c, 0x94, 0x04, 0xd6, 0x02, 0xd0, 0xd8, 0xf2, 0x89, 0x4f, 0x04, 0xc4, 0xe6, 0x56, 0x86, 0x6e, + 0x6c, 0xfb, 0x84, 0xf8, 0x63, 0x64, 0x0b, 0x6f, 0x30, 0xb9, 0xb4, 0x61, 0x38, 0x5b, 0x84, 0x3c, + 0x42, 0x03, 0x42, 0xfb, 0xd9, 0x99, 0xcc, 0xc9, 0x43, 0xcd, 0x0d, 0x4d, 0xf0, 0x82, 0x02, 0xd1, + 0xfa, 0x56, 0x02, 0x6f, 0x5d, 0x50, 0xff, 0x98, 0xe3, 0xd0, 0x24, 0xe8, 0x4d, 0xb5, 0x36, 0x90, + 0x87, 0x90, 0x41, 0x5d, 0x6a, 0x4a, 0xed, 0xda, 0xee, 0x96, 0x95, 0x15, 0xb6, 0x16, 0x85, 0xad, + 0x83, 0x70, 0xe6, 0x0a, 0x84, 0xb6, 0x0d, 0x64, 0x8a, 0xbf, 0x46, 0x7a, 0xb1, 0x29, 0xb5, 0x25, + 0xa7, 0x7c, 0x97, 0x9a, 0x52, 0xc7, 0x15, 0x9f, 0x34, 0x13, 0xc8, 0x23, 0x48, 0x47, 0x7a, 0xa9, + 0x29, 0xb5, 0xab, 0x4e, 0xed, 0x8f, 0xd4, 0x54, 0xe2, 0x71, 0xb4, 0xdf, 0xea, 0xb4, 0x5c, 0x11, + 0xd0, 0x34, 0x20, 0x5f, 0xc6, 0x24, 0xd0, 0x65, 0x0e, 0x70, 0x85, 0xbd, 0x2f, 0x7f, 0xf3, 0xbd, + 0x59, 0x68, 0xfd, 0x50, 0x04, 0x6a, 0x17, 0xf9, 0xd0, 0x9b, 0xf5, 0xa6, 0xda, 0x16, 0x28, 0x87, + 0x24, 0xf4, 0x90, 0xe8, 0x46, 0x76, 0x33, 0x47, 0x3b, 0x05, 0x55, 0x1f, 0xf2, 0x0b, 0x63, 0x2f, + 0xab, 0x5e, 0x75, 0x3e, 0xfc, 0x35, 0x35, 0x3f, 0xf0, 0x31, 0x1b, 0x4d, 0x06, 0x96, 0x47, 0x82, + 0x7c, 0x0c, 0xf9, 0x4f, 0x87, 0x0e, 0xbf, 0xb2, 0xd9, 0x2c, 0x42, 0xd4, 0x3a, 0x0b, 0x99, 0xab, + 0xfa, 0x90, 0x7e, 0xca, 0xcf, 0x6a, 0x06, 0x28, 0xf9, 0x90, 0x8a, 0x2e, 0x65, 0xa7, 0x3e, 0x4f, + 0x4d, 0xf5, 0x14, 0xd2, 0x2e, 0x0e, 0x30, 0x73, 0x79, 0x40, 0x7b, 0x05, 0x8a, 0x8c, 0xe4, 0x3d, + 0x16, 0x19, 0xd1, 0xce, 0x41, 0x39, 0x81, 0xe3, 0x09, 0xd2, 0xcb, 0xa2, 0xe8, 0x47, 0x4f, 0x2f, + 0x3a, 0x4f, 0xcd, 0xca, 0x41, 0x40, 0x26, 0x21, 0x73, 0xb3, 0x14, 0x7c, 0x02, 0x62, 0xce, 0x95, + 0xa6, 0xd4, 0xae, 0xe7, 0x13, 0xad, 0x03, 0x29, 0xd1, 0x15, 0xf1, 0x41, 0x4a, 0xb8, 0x17, 0xeb, + 0x6a, 0xe6, 0xc5, 0xdc, 0xa3, 0x7a, 0x35, 0xf3, 0xe8, 0xfe, 0x2b, 0x3e, 0xab, 0x9f, 0x7f, 0xec, + 0x54, 0x7a, 0xd3, 0x23, 0xc8, 0x60, 0xeb, 0xcf, 0x12, 0xa8, 0x1f, 0x78, 0x1e, 0xa2, 0xb4, 0x8b, + 0x29, 0xeb, 0x4d, 0xb5, 0x2f, 0x81, 0xea, 0x8d, 0x20, 0x0e, 0xfb, 0x78, 0x28, 0x86, 0x57, 0x75, + 0x3e, 0xfe, 0x57, 0xdd, 0x2a, 0x87, 0xfc, 0xf4, 0xd9, 0xd1, 0x5d, 0x6a, 0x2a, 0x5e, 0x66, 0xba, + 0xb9, 0x31, 0x5c, 0xd1, 0x52, 0xdc, 0x48, 0x4b, 0xe9, 0xbf, 0xd3, 0x22, 0x3f, 0x4e, 0x4b, 0xf9, + 0x21, 0x2d, 0x95, 0x97, 0xa3, 0x45, 0xb9, 0x47, 0x0b, 0x04, 0x2a, 0x14, 0xb3, 0x45, 0x54, 0x57, + 0x9b, 0xa5, 0x76, 0x6d, 0xf7, 0x3d, 0xeb, 0x9f, 0xff, 0xbd, 0x56, 0xc6, 0x41, 0x6f, 0x12, 0x8d, + 0x91, 0xd3, 0xbc, 0x4e, 0xcd, 0xc2, 0x5d, 0x6a, 0x02, 0xb8, 0x24, 0xe6, 0xea, 0x37, 0x13, 0xac, + 0x68, 0x72, 0x97, 0x69, 0x33, 0xe6, 0xab, 0x6b, 0xcc, 0x83, 0x35, 0xe6, 0x6b, 0x9b, 0x98, 0xff, + 0x49, 0x06, 0xf5, 0xa3, 0x59, 0x08, 0x03, 0xec, 0x9d, 0x20, 0xf4, 0x66, 0x98, 0x3f, 0x07, 0x35, + 0xce, 0x3c, 0xc3, 0x51, 0xdf, 0x83, 0xd1, 0x33, 0xb8, 0xe7, 0xc2, 0xe9, 0xe1, 0xe8, 0x10, 0x46, + 0x8b, 0x5c, 0x97, 0x08, 0x89, 0x5c, 0xf2, 0xb3, 0x72, 0x9d, 0x20, 0xc4, 0x73, 0xe5, 0x42, 0x2a, + 0x3f, 0x2e, 0xa4, 0xca, 0x43, 0x21, 0x29, 0x2f, 0x27, 0x24, 0x75, 0x83, 0x90, 0xaa, 0xff, 0xa3, + 0x90, 0xc0, 0x9a, 0x90, 0x6a, 0x6b, 0x42, 0xaa, 0x6f, 0x12, 0x52, 0x0b, 0x34, 0x8e, 0xa7, 0x0c, + 0x85, 0x14, 0x93, 0xf0, 0x93, 0x88, 0x61, 0x12, 0xd2, 0xd5, 0x5a, 0xc8, 0x1f, 0x67, 0x03, 0xbc, + 0xfe, 0x3b, 0xe6, 0x73, 0x34, 0xd8, 0x5b, 0xc6, 0xaf, 0x24, 0xf0, 0xce, 0xda, 0x3a, 0x71, 0x11, + 0x8d, 0x48, 0x48, 0xc5, 0x38, 0xc4, 0x46, 0x90, 0xb2, 0x07, 0x5f, 0x2c, 0x01, 0x1b, 0xc8, 0x63, + 0xe2, 0x53, 0xbd, 0x28, 0x46, 0xf1, 0xee, 0xa6, 0x51, 0x74, 0x89, 0xef, 0x0a, 0xa0, 0xf6, 0x36, + 0x28, 0xc5, 0x88, 0x09, 0x7d, 0xd5, 0x5d, 0x6e, 0x6a, 0xdb, 0x40, 0x4d, 0x82, 0x3e, 0x8a, 0x63, + 0x12, 0xe7, 0xef, 0xb4, 0x92, 0x04, 0xc7, 0xdc, 0xe5, 0x21, 0x2e, 0xa4, 0x09, 0x45, 0xc3, 0x4c, + 0x01, 0xae, 0xe2, 0x43, 0xfa, 0x19, 0x45, 0xc3, 0xac, 0xd9, 0x5d, 0x0c, 0x4a, 0x17, 0xd4, 0xd7, + 0x06, 0x00, 0xdc, 0x5b, 0x7f, 0xef, 0x6f, 0xea, 0x62, 0xed, 0x5a, 0x8d, 0xce, 0x93, 0x60, 0x8b, + 0xdb, 0x3b, 0xce, 0xf5, 0xdc, 0x90, 0x6e, 0xe6, 0x86, 0xf4, 0xfb, 0xdc, 0x90, 0xbe, 0xbb, 0x35, + 0x0a, 0x37, 0xb7, 0x46, 0xe1, 0x97, 0x5b, 0xa3, 0xf0, 0x45, 0xfb, 0x9e, 0xbe, 0xd8, 0x08, 0xc6, + 0x14, 0x53, 0x7b, 0xb5, 0xb5, 0xa7, 0x62, 0x6f, 0x0b, 0x95, 0x0d, 0x2a, 0x62, 0x05, 0xef, 0xfd, + 0x15, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x5f, 0x67, 0x36, 0x5a, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -722,6 +790,136 @@ func (m *AccessListTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DynamicFeeTx) 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 *DynamicFeeTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DynamicFeeTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.S) > 0 { + i -= len(m.S) + copy(dAtA[i:], m.S) + i = encodeVarintTx(dAtA, i, uint64(len(m.S))) + i-- + dAtA[i] = 0x62 + } + if len(m.R) > 0 { + i -= len(m.R) + copy(dAtA[i:], m.R) + i = encodeVarintTx(dAtA, i, uint64(len(m.R))) + i-- + dAtA[i] = 0x5a + } + if len(m.V) > 0 { + i -= len(m.V) + copy(dAtA[i:], m.V) + i = encodeVarintTx(dAtA, i, uint64(len(m.V))) + i-- + dAtA[i] = 0x52 + } + if len(m.Accesses) > 0 { + for iNdEx := len(m.Accesses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Accesses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintTx(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x42 + } + if m.Amount != nil { + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if len(m.To) > 0 { + i -= len(m.To) + copy(dAtA[i:], m.To) + i = encodeVarintTx(dAtA, i, uint64(len(m.To))) + i-- + dAtA[i] = 0x32 + } + if m.GasLimit != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.GasLimit)) + i-- + dAtA[i] = 0x28 + } + if m.GasFeeCap != nil { + { + size := m.GasFeeCap.Size() + i -= size + if _, err := m.GasFeeCap.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.GasTipCap != nil { + { + size := m.GasTipCap.Size() + i -= size + if _, err := m.GasTipCap.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Nonce != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Nonce)) + i-- + dAtA[i] = 0x10 + } + if m.ChainID != nil { + { + size := m.ChainID.Size() + i -= size + if _, err := m.ChainID.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ExtensionOptionsEthereumTx) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -962,6 +1160,63 @@ func (m *AccessListTx) Size() (n int) { return n } +func (m *DynamicFeeTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ChainID != nil { + l = m.ChainID.Size() + n += 1 + l + sovTx(uint64(l)) + } + if m.Nonce != 0 { + n += 1 + sovTx(uint64(m.Nonce)) + } + if m.GasTipCap != nil { + l = m.GasTipCap.Size() + n += 1 + l + sovTx(uint64(l)) + } + if m.GasFeeCap != nil { + l = m.GasFeeCap.Size() + n += 1 + l + sovTx(uint64(l)) + } + if m.GasLimit != 0 { + n += 1 + sovTx(uint64(m.GasLimit)) + } + l = len(m.To) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Amount != nil { + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Accesses) > 0 { + for _, e := range m.Accesses { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + l = len(m.V) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.R) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.S) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + func (m *ExtensionOptionsEthereumTx) Size() (n int) { if m == nil { return 0 @@ -1903,6 +2158,440 @@ func (m *AccessListTx) Unmarshal(dAtA []byte) error { } return nil } +func (m *DynamicFeeTx) 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 ErrIntOverflowTx + } + 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: DynamicFeeTx: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DynamicFeeTx: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v github_com_cosmos_cosmos_sdk_types.Int + m.ChainID = &v + if err := m.ChainID.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Nonce", wireType) + } + m.Nonce = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Nonce |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GasTipCap", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v github_com_cosmos_cosmos_sdk_types.Int + m.GasTipCap = &v + if err := m.GasTipCap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GasFeeCap", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v github_com_cosmos_cosmos_sdk_types.Int + m.GasFeeCap = &v + if err := m.GasFeeCap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GasLimit", wireType) + } + m.GasLimit = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.GasLimit |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.To = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v github_com_cosmos_cosmos_sdk_types.Int + m.Amount = &v + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + 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 ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Accesses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Accesses = append(m.Accesses, AccessTuple{}) + if err := m.Accesses[len(m.Accesses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field V", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.V = append(m.V[:0], dAtA[iNdEx:postIndex]...) + if m.V == nil { + m.V = []byte{} + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field R", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.R = append(m.R[:0], dAtA[iNdEx:postIndex]...) + if m.R == nil { + m.R = []byte{} + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field S", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.S = append(m.S[:0], dAtA[iNdEx:postIndex]...) + if m.S == nil { + m.S = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ExtensionOptionsEthereumTx) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/evm/types/tx_data.go b/x/evm/types/tx_data.go index 73edaa79..b9c841ef 100644 --- a/x/evm/types/tx_data.go +++ b/x/evm/types/tx_data.go @@ -7,7 +7,11 @@ import ( ethtypes "github.com/ethereum/go-ethereum/core/types" ) -var _ TxData = &AccessListTx{} +var ( + _ TxData = &LegacyTx{} + _ TxData = &AccessListTx{} + _ TxData = &DynamicFeeTx{} +) // TxData implements the Ethereum transaction tx structure. It is used // solely as intended in Ethereum abiding by the protocol. @@ -22,6 +26,8 @@ type TxData interface { GetNonce() uint64 GetGas() uint64 GetGasPrice() *big.Int + GetGasTipCap() *big.Int + GetGasFeeCap() *big.Int GetValue() *big.Int GetTo() *common.Address @@ -37,6 +43,8 @@ type TxData interface { func NewTxDataFromTx(tx *ethtypes.Transaction) TxData { var txData TxData switch tx.Type() { + // case ethtypes.DynamicFeeTxType: + // txData = newDynamicFeeTx(tx) case ethtypes.AccessListTxType: txData = newAccessListTx(tx) default: